New spawner breaker: /vspawner admin tool <player> <uses> <chance> [-s] (permission snvirtualspawners.admin.tool) gives a unique tool. Its uses and its chance (percent, 0-100) come from the command, never from config.
Each spawner break with it spends one use, skips the Silk Touch rule and gets the spawners back with the tool's chance: each spawner of a stack rolls on its own (breaker-tool.roll-per-spawner: true) or one roll for the whole stack. The tool is gone at 0 uses. Vanilla spawners convert with the same chance.
New breaking.require-tool (default false, so nothing changes until you turn it on): breaking without the breaker still sells the storage and gives the XP, but the spawners are lost and vanilla spawners are not converted.
New breaker-tool section: enabled, roll-per-spawner and the tool look under item (any SnLib item key, {uses} and {chance}; name and lore are rewritten after every use).
New log action admin_tool; break log entries now record how many spawners were kept.
New icon: key in mobs/<id>.yml: a material or a head texture (textures.minecraft.net URL, texture-, base64-, basehead-). Defaults to SPAWNER.
New {icon} placeholder in the spawner menus, the storage GUI and the buy-stacks GUI.
The shipped info buttons use material: "{icon}", and 36 of the 40 bundled mobs ship their head texture, so the menu shows the mob's head.
Existing servers: mob files are seed-only and menu templates keep your values, so add icon: to your mob files and set the info button's material: to "{icon}" to adopt it.
First stable release of SnVirtualSpawners: virtual spawners that never spawn mobs, store drops and XP, stack into one block and open per-mob menu templates (extract, sell, collect XP, buy stacks).
Per-mob restrictions, action log with an in-game viewer, optional CoreProtect logging, holograms, vanilla spawner conversion, SQLite or MySQL storage.
Final audit gate PASSED: 4 critical findings verified fixed (1 contained), 0 accepted risks, close pass run with 0 new criticals.
Licensed bundle plugin (Sn License), obfuscated jar. Paper 1.20.4 to every 1.21.x and 26.x+, one jar. Requires SnLib 1.41.0 or newer.
Known limitations
A spawner item dropped to the floor is invulnerable, never despawns and is reserved for the breaker, but the void still removes it, and an abandoned one persists until staff /kill it. The same holds for an item that overflows a full inventory (admin give, stacking leftovers).
If another plugin cancels the item spawn while the breaker's inventory is full, the dropped stack is destroyed; a SEVERE console line lets staff restore it with /vspawner admin give.
Suspected duplicate if an item-stacker plugin merges and cancels inside the item spawn event (unconfirmed, needs a runtime check on the target server).
Sales, extractions, XP collection and stack purchases are persisted within one tick; a crash inside that window or a failed write (retried by the 30 s cadence) can restore the older state.
Final flush ordering is not guaranteed if a MySQL write is stalled past 10 s at shutdown.
A spawner holding items of a material the server no longer knows cannot be broken until a manual database edit.
ProtectionStones and WorldGuard behavior on a non-member's click is unverified.
The obfuscated jar is pending runtime confirmation on a live server.