GrzybcioRynek

Listings

Model MarketListing, wystawianie z głównej ręki i ID z next-id w listings.yml.

Kompatybilne z: GrzybcioRynek 1.0.3Minecraft 26.2Web 0.1.0

Na podstawie kodu GrzybcioRynek 1.0.3 i web 0.1.0.

Oferta to com.example.marketplace.model.MarketListing. Zapis: plugins/GrzybcioRynek/listings.yml. Tworzenie: StorageManager.createListing z MarketManager.sellItem.

Model

PoleTypOpis
idintUnikalne, z next-id (autoinkrement)
sellerUUIDSprzedawca
sellerNameStringNick w momencie wystawienia
itemItemStackKlon stacka z ręki (Bukkit serialize)
pricedoubleCena stała
timestamplongSystem.currentTimeMillis() — baza wygaśnięcia
nexoIdString / nullID Nexo, jeśli hook wykrył item
oraxenIdString / nullID Oraxen, analogicznie
yaml
listings:
  - id: 1
    seller: 069a79f4-44e9-4726-a5be-fca90e38aaf5
    sellerName: Gracz
    item: {==: org.bukkit.inventory.ItemStack, v: 1, type: DIAMOND_SWORD, amount: 1}
    price: 1500.0
    timestamp: 1730000000000
    nexoId: my_sword   # opcjonalne
    oraxenId: steel_blade
next-id: 2

next-id przy starcie = max(zapisane next-id, największe id + 1).

Jak wystawić

  1. Przedmiot w głównej ręce (nie off-hand).
  2. /market sell <cena> albo /wystaw <cena> (market.use + market.sell).
  3. Walidacja: cena skończona i w settings.min-pricesettings.max-price.
  4. Cooldown anti-abuse.listing-cooldown-seconds (gdy antynadużycia włączone).
  5. Limit settings.max-listings-per-player (aktywne oferty tego UUID).
  6. Prowizja wystawienia (listing-fee-percent) — pobranie Vault przed zapisem; przy błędzie item wraca, fee jest zwracane.
  7. Ręka czyszczona (setItemInMainHand(null)), zapis oferty, ListingCreatedEvent, AlertService.checkListing.

Cały stack z ręki idzie na rynek (amount zachowany).

Limit i cena

yaml
settings:
  max-listings-per-player: 10
  min-price: 1.0
  max-price: 1000000.0

Przekroczenie limitu: sell.limit-reached. Zła cena: sell.invalid-price.

Usuwanie

AkcjaPowód skrzynkiKto dostaje item
/market remove właścicielremovedWłaściciel (ekwipunek albo skrzynka)
/market admin removeadmin-removedSprzedawca
Wygaśnięcie / forceexpireexpiredSprzedawca
ZakupKupujący (nadmiar → purchase-overflow)

Przy usunięciu: removeFavoriteEverywhere(id). Oferta zarezerwowana (trwa buyItem) nie da się usunąć (buy.listing-locked).

Rezerwacja

MarketManager.reservedListings trzyma ID w trakcie zakupu. Reload przy niepustym zbiorze jest zablokowany. Timer wygaśnięć pomija zarezerwowane oferty.

Custom itemy

Przy wystawieniu zapisywane są nexoId / oraxenId (jeśli hook działa). Odtwarzanie: CustomItemsHook.recreateItem — najpierw klon zapisanego stacka; przebudowa z ID packa tylko gdy zapisany typ to AIR. Szczegóły: Nexo, serializacja.

Czego nie ma

  • Wystawiania z off-hand albo z GUI „wrzuć item”.
  • Edycji ceny istniejącej oferty (jest relist ze skrzynki: nowa oferta, nowe ID).
  • SQL — tylko YAML.