GrzybcioRynek

listings.yml

Runtime YAML ofert — listings, next-id, expiry-outbox, pending-returns, pending-sales.

Kompatybilne z: GrzybcioRynek 1.0.3Minecraft 26.2Web 0.1.0

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 pluginiesave() nadpisze plik.

Backup: listings.yml.bak przy enable/reload (backupListings, REPLACE_EXISTING).

Główne klucze

yaml
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
KluczTypRola
listingslista map (MarketListing serializable)Aktywne oferty
next-idintNastępne ID; przy load max(plik, maxId+1)
expiry-outbox.<id>sekcjaDziennik zwrotów wygasłych
pending-returns.<uuid>lista itemówOffline zwroty gdy skrzynka wyłączona
pending-sales.<uuid>listaPowiadomienia sprzedaży dla offline sprzedawcy
pending-sales.by-name.<nick>legacyCzyszczone przy joinie

Pola oferty

PoleWymaganeOpis
idtakUnikalny int
sellertakUUID string
sellerNamenieFallback "Nieznany"
itemtakBukkit ItemStack; AIR / amount≤0 = oferta odrzucona przy parse
pricetakdouble
timestamptakepoch ms — baza listing-expiry-days
nexoId / oraxenIdnieID packa; brak = vanilla / sam stack

expiry-outbox

Zapis przed usunięciem oferty z listy (crash-safe):

yaml
expiry-outbox:
  "42":
    seller: "069a79f4-44e9-4726-a5be-fca90e38aaf5"
    item: {==: org.bukkit.inventory.ItemStack, type: DIAMOND, amount: 16}
    price: 100.0
    reason: expired

processExpiryOutbox kasuje wpis, potem dostarcza item. Pusty / zły UUID = wpis usuwany.

pending-returns

Gdy mailbox.enabled: false i sprzedawca offline (albo addPendingReturnPublic):

yaml
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):

yaml
pending-sales:
  <seller-uuid>:
    - buyer: NickKupującego
      item: "DIAMOND_SWORD"
      price: 1500.0

pending-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).