GrzybcioRynek

MarketListing

Model oferty rynku — pola, serializacja YAML i odtwarzanie ItemStack.

Kompatybilne z: GrzybcioRynek 1.0.3Minecraft 26.2Web 0.1.0

Na podstawie kodu GrzybcioRynek 1.0.3 i web 0.1.0.

MarketListing (model/MarketListing.java) to aktywna oferta. Implementuje ConfigurationSerializable i jest rejestrowana w MarketPlace.onEnable przez ConfigurationSerialization.registerClass(MarketListing.class).

Pola

PoleTypZnaczenie
idintID oferty (StorageManager.nextId)
sellerUUIDsprzedawca
sellerNameStringnick w momencie wystawienia; brak → "Nieznany"
itemItemStackzapisany przedmiot
pricedoublecena stała
timestamplongSystem.currentTimeMillis() przy utworzeniu
oraxenIdStringID Oraxen albo null
nexoIdStringID Nexo albo null

Konstruktor: new MarketListing(id, seller, sellerName, item, price, timestamp, oraxenId, nexoId).

Nie ma pola „aktywna / zarezerwowana”. Rezerwacja podczas zakupu jest w pamięci: MarketManager.reservedListings.

Serializacja do listings.yml

serialize() zapisuje: id, seller (UUID jako string), sellerName, item, price, timestamp. oraxenId / nexoId tylko gdy nie-null.

deserialize(Map) wymaga item przez ItemStackSerializer.parse. Brak itemu:

text
IllegalArgumentException: Brak przedmiotu w ofercie #<id>

Brak liczby dla id / price / timestamp:

text
IllegalArgumentException: Brak lub nieprawidłowa wartość dla: <klucz>

StorageManager.parseListing akceptuje też starszy format Map i woła MarketListing.deserialize. Uszkodzony item: log Pominięto oferte #<id> - brak przedmiotu.

Tworzenie

StorageManager.createListing(seller, sellerName, item, price, oraxenId, nexoId):

  1. id = nextId++
  2. timestamp = System.currentTimeMillis()
  3. dodanie do listy w pamięci
  4. synchroniczny save() do listings.yml

ID Nexo/Oraxen ustawia MarketManager.sellItem przez CustomItemsHook.getNexoId / getOraxenId przed zdjęciem itemu z ręki.

Odtwarzanie itemu

Przy zakupie, usunięciu i wygaśnięciu item idzie przez CustomItemsHook.recreateItem(listing):

  1. klon zapisanego ItemStack (enchanty, PDC, nazwa);
  2. przebudowa z ID packa tylko gdy zapisany typ to AIR.

Wygasanie

Oferta wygasa, gdy now - timestamp > listing-expiry-days (domyślnie 7 dni). Timer w MarketPlace: co 30 minut. Zarezerwowana oferta (isListingReserved) jest pomijana.

Powiązane modele

KlasaRola
MarketTransactionprzebieg zakupu (ID UUID-string, stany, fee)
BrowseContextfiltr GUI: kategoria, sort, strona, fraza, sprzedawca, ulubione
SortModeCHEAPEST, EXPENSIVE, NEWEST, OLDEST, MOST_AMOUNT, LEAST_AMOUNT
MailboxEntryzwrot itemu (powód, poprzednia cena)
PriceAlertalert cenowy
SellerRatingocena 1–5 powiązana z transactionId