GrzybcioRynek

Expiration

Oferty wygasają po listing-expiry-days od timestamp; timer co 30 minut plus start pluginu.

Kompatybilne z: GrzybcioRynek 1.0.3Minecraft 26.2Web 0.1.0

Na podstawie kodu GrzybcioRynek 1.0.3 i web 0.1.0.

Czas życia oferty = settings.listing-expiry-days dni od MarketListing.timestamp. Domyślnie 7. Sprawdzenie: przy onEnable oraz co 30 minut (20L * 60 * 30 ticków) w MarketPlace. Także po /market reload.

Warunek

teraz - timestamp > listing-expiry-days w milisekundach

Zarezerwowana oferta (trwa zakup) nie jest wygaszana w tym przebiegu.

Przebieg (StorageManager.removeExpiredListings)

  1. Zbierz wygasłe, pomijając reservedListings.
  2. Najpierw zapisz dziennik expiry-outbox.<id> (seller, item, price, reason expired) i wyczyść ulubione.
  3. Usuń oferty z listy, save().
  4. processExpiryOutbox() — dostarczenie itemu.

Kolejność journal → usunięcie jest po to, żeby crash nie zgubił itemu i nie zduplikował oferty.

Outbox

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

Przy przetwarzaniu wpis jest kasowany przed dostawą; przy błędzie dostawy item wraca do outbox / skrzynki.

Gdzie ląduje item

SytuacjaWynik
Sprzedawca online, jest miejsceEkwipunek + messages.expiry.returned
Online, brak miejsca / resztkaSkrzynka (mailbox.enabled) albo drop / pending-returns
Offline, skrzynka włączonamarket-data.yml mailbox, powód expired
Offline, skrzynka wyłączonalistings.ymlpending-returns.<uuid>

/market admin forceexpire <id> używa tej samej ścieżki zwrotu z powodem expired (bez czekania na timer).

Konfiguracja

yaml
settings:
  listing-expiry-days: 7

0 oznacza natychmiastowe wygaśnięcie przy następnym ticku timera (różnica czasu > 0). Nie ustawiaj ujemnych wartości — kod nie sanityzuje ich osobno.

Pełny opis kluczy: configuration/expiration.