Item Serialization
ItemStack Bukkit w YAML plus opcjonalne nexoId/oraxenId — recreateItem klonuje stack, rebuild tylko przy AIR.
Na podstawie kodu GrzybcioRynek 1.0.3 i web 0.1.0.
Przedmiot oferty i transakcji jest zapisywany jako natywny Bukkit ItemStack w YAML (ConfigurationSerializable). Dodatkowo, jeśli hook coś wykrył, zapisane są stringi nexoId / oraxenId.
Parse
ItemStackSerializer.parse:
- już
ItemStack→ clone, o ile nie AIR iamount > 0 Map→ItemStack.deserialize- AIR / amount ≤ 0 / wyjątek →
null
Oferta bez poprawnego itemu jest pomijana przy load (parseListing / deserialize rzuca / wraca null).
Zapis oferty
MarketListing.serialize():
id: 1
seller: "…"
sellerName: Gracz
item: {==: org.bukkit.inventory.ItemStack, type: DIAMOND_SWORD, amount: 1, meta: …}
price: 1500.0
timestamp: 1730000000000
nexoId: my_sword # tylko gdy nie null
oraxenId: steel_bladeTo samo idzie do TX w market-data.yml.
recreateItem
clone(stored)
jeśli stored jest AIR:
spróbuj Nexo z nexoId
inaczej spróbuj Oraxen z oraxenId
zwróć stored (klon)
Cel: zachować enchants, PDC, display name z momentu wystawienia. Pack jest planem B przy uszkodzonych danych (AIR).
Skrzynka i outbox
Mailbox i expiry-outbox też trzymają ItemStack w YAML. Outbox używa recreateItem w momencie kolejkowania.
Czego nie ma
- Osobnego formatu base64
- SQL BLOB
- ItemsAdder namespaced-id
- Przepisywania itemu przy każdym
load()