Every item a player picked up queued its own next-tick refresh of the
whole inventory's aura and charge lore, and each refresh re-reads the lore
of every item. Picking up a pile queued one full refresh per item entity.
The listener now queues one refresh per player per tick: further pickups
before it runs ride on it, since it reads the whole inventory then. That is
the same result as several refreshes, because ArtifactLore.apply and
ChargeLore.apply strip their own block and rebuild it from the item's
data. The queued mark is cleared by its own task, also when SessionGuard
skips the refresh (player gone or character switched), so the next pickup
always queues again. Coin pickups never reach this (DenarEconomy cancels
them).
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
What
Picking up several items in one tick now schedules one lore refresh for the player instead of one per item.
Why
Every player pickup scheduled a full-inventory lore refresh (
VesselLore.updateInventory) for the next tick. Each refresh re-reads every item's lore (ArtifactLore.readAura), so picking up N items in one tick ran N identical refreshes. Coins are not affected, because DenarEconomy cancels their pickup. The cost is small (under 1.8 s/h on Main).How
onPickupschedules the sameSessionGuard.runLater(... updateInventory)only when none is pending, then a secondrunTaskclears the mark.ArtifactLore.applyandChargeLore.applystrip their own lore block and rebuild it from the item's data, so one refresh gives the same result as several.Checked
ArtifactListenerTest:ArtifactListenerhas 0 missed instructions, branches and lines. The full local suite fails only in Windows file-lock suites that this change doesn't touch.Dev (TFMCDev01, 11-03)
magic-BLOOD-PICKUP-250a7d7-DEV.jar: Blood Magic draft Add the hidden Blood Magic path #71 (2479d18) + the getHolder change + this commit. Same class list as the previous Dev jar; onlyArtifactListenerdiffers.Draft: not merged, not released, nothing on Main or Tutorial.
🤖 Generated with Claude Code