PerfectSpawner v2.0.3 - Major reliability update
This release fixes two critical bugs that were affecting servers running
multiple worlds or letting spawners persist overnight, and adds three
quality-of-life features along with new live diagnostic commands.
Critical fixes
- Hologram entity leak. The hologram sync routine used to run every
single tick (1 second) regardless of chunk state. When a spawner's
chunk was unloaded, the plugin could not find the existing hologram
entity in the ECS, so it spawned a fresh one - over and over again.
One server reported 18,000+ orphan hologram entities accumulated
overnight, dragging FPS to single digits.
Now the sync runs every 60 seconds (configurable), is dispatched
per-world instead of globally, and is gated by a chunk-loaded check
so spawners in unloaded chunks are skipped entirely.
- Cross-world spawn failure. The hologram manager used to capture a
single world's EntityStore at startup. Spawners placed in any other
world failed every sync with "Assert not in thread" because the
plugin was reaching into the wrong world's data from the wrong
thread, leaking error spam in the console and never tracking the
affected holograms.
Each hologram operation now resolves its own per-world store on the
fly. Multi-world setups work correctly.
New features
- Skyblock-friendly passive spawning. New config flag:
"requirePlayerNearby": false
When set to false, spawners ignore the proximity check entirely
and tick mobs even when no player is in the world. Designed for
Skyblock-style servers where players are on distant islands but
still want their mob farms ticking. Default stays true to preserve
the v2.0.0 behavior.
- Per-world hologram sync. The 60-second hologram sync now runs once
per world that actually has spawners, instead of running on a single
world for the entire server. Spawners in instances or sub-worlds
are properly maintained.
- Configurable sync interval. New config field:
"hologramSyncIntervalSec": 60
Default is 60 seconds, minimum 10. Big servers with many spawners
can raise this further without losing functionality.
New diagnostic commands
- /spawner debug
Prints a snapshot to chat and console: spawner count, holograms
currently tracked, total spawns / removes / syncs (cumulative),
time since last sync, live config snapshot, and a live ECS scan
that counts orphan Nameplate entities near each spawner.
Healthy server shows tracked == registered and 0 orphans.
- /spawner sweep
Scans Nameplate entities within 3 blocks of every spawner in the
current world and deletes the ones not tracked by the plugin.
Run this once after upgrading from an older version to clean up
any leftover entities the leak fix cannot reach on its own.
Background diagnostics
- The scheduler now writes a one-liner to the console every minute:
[PerfectSpawner][1min] spawners=N tracked=N spawned=N(+delta)
removed=N(+delta) syncs=N
If a suspicious gap is detected (sudden spawn growth while tracked
lags behind), the log appends " <-- POSSIBLE LEAK" so the server
owner notices without having to dig.
Permissions
- /spawner debug and /spawner sweep both require perfectspawner.admin
(the same permission as /spawner reload).
Upgrade notes
- Drop-in upgrade from v2.0.x. Existing config.json will auto-add the
two new fields (requirePlayerNearby, hologramSyncIntervalSec) on
first load with their default values. No data migration required.
- If you were affected by the leak on v2.0.0, run /spawner sweep in
each affected world once after upgrading to wipe leftover orphan
hologram entities. A server restart also speeds up cleanup.
Compatibility
- Hytale Update 5 (Pre-Release 5).
Wiki: https://perfectplugins.github.io/wiki/perfectspawner/
Discord: https://discord.gg/perfectplugins
PerfectSpawner v2.0
2026-05-26
Hytale Update 5 compatibility update.
Changes:
- Updated for Hytale Update 5 (Pre-Release 5).
- Recompiled against the latest server API (JOML vectors, new permission and HUD APIs).
- Fixed the red "Target Version" warning shown in the mod manager.
- No feature changes. Your existing configs, data and saved files are kept as is.
How to update:
- Stop your server.
- Replace the old PerfectSpawner jar with this one.
- Start your server. Nothing else to do.
PerfectSpawner v2.0 — Major Update
NEW FEATURES
- Single-page admin UI — Dark flat design with 3 tabs (Spawners, Types, Settings), sidebar navigation, search and pagination
- Proximity activation — Spawners only activate when a player is within a configurable radius (default 32 blocks, -1 = always active)
- Day/Night toggle — Per-type setting: spawn always, day only, or night only
- Drop rate multiplier — Per-type configurable multiplier (0.5x to unlimited)
- Multi-entity editor — Add, remove, and edit entity weights directly in the UI with NPC picker
- NPC Picker — Search and select from 166+ entity types when adding to spawn tables
- Toast notifications — Visual feedback on save, delete, and toggle actions
- Portuguese translations — 6th language added (EN, FR, ES, DE, IT, PT)
IMPROVEMENTS
- Removed all debug console spam
- Proximity check runs on game thread for accurate position reading
- Entity list is now mutable (add/remove entities without editing JSON)
- Spawner tab shows read-only stats with hidden +/- buttons
- Stale sidebar icons properly cleared when switching tabs
- Settings tab includes activation radius control
TECHNICAL
- SpawnerPlayerTracker now properly registered as ECS system
- Time restriction uses real API: getTick() + getDaytimeDurationSeconds()
- Version bump: manifest 2.0.0
PerfectSpawner v1.5 — Patch Notes
Bug Fixes
- Fixed spawner holograms not reappearing after returning from a distant area. When a player moved far enough for the chunk to unload, Hytale would destroy the hologram entities. The syncHolograms() method only checked if the spawner key existed in the internal tracking map — since the stale UUID was still present, it assumed the hologram was alive and never respawned it. The sync now validates each hologram entity via getRefFromUUID() + isValid(). If the entity was destroyed by a chunk unload, the stale entry is cleared and the hologram is automatically respawned. Since the sync runs every second, holograms reappear almost instantly when the player returns.
Technical Details
- Modified SpawnerHologramManager.syncHolograms() to verify ECS entity liveness before skipping respawn
- Stale UUID entries are cleaned from holoMap when the referenced entity no longer exists in the store
- No additional scheduler needed — leverages the existing 1-second sync cycle from SpawnerScheduler
New: Chunk Keep-Loaded
Spawners can now keep their chunk loaded even when no player is nearby. This means spawners continue to function at all times — mobs spawn whether or not anyone is in range.
- Per-spawner toggle in the Spawner List UI (Loaded / Unload button)
- Uses Hytale's native addKeepLoaded() / removeKeepLoaded() chunk ref-counting system
- Automatically re-applied on server restart for spawners that had it enabled
- Properly cleaned up when a spawner is broken or removed
- Multiple spawners in the same chunk share the keep-loaded reference safely
![]()
PerfectSpawner v1.4 — Patch Notes
New: Unique 3D Cage Models per Spawner
Every spawner now has its own merged 3D model combining the cage with the actual NPC inside it. Instead of a generic spawner block, you can now visually identify which mob a spawner will produce just by looking at it.
- 167 unique spawner models — every single spawner has its own cage+mob visual
- Each NPC model is automatically scaled and centered inside the cage
- Textures are combined per-spawner for a seamless look
- Variant-aware: Skeleton spawners show the correct color (White, Frost, Burnt, Sand), Zombie spawners show their variant, etc.
- Covers all mob categories: Wildlife, Beasts, Undead, Intelligent (Goblins, Trorks, Outlanders), Bosses (Dragons, Rex, Yeti), and more
⬥ PerfectSpawner ⬥
Patch 1.3.1
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
Bug Fixes
⬥ Spawners are now breakable
- Fixed spawner blocks being impossible to mine — they were using an invalid GatherType
- Spawners can now be broken by hand or with any tool
- Breaking a spawner drops the item back and cleans up hologram + data automatically
⬥ Fixed item duplication on break
- Removed the plugin-side item give on break — the game already handles the drop natively
- Previously, breaking a spawner would give two copies of the item (one from the game, one from the plugin)
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
Changes
⬥ Removed "Drop on Break" setting
- The toggle has been removed from the settings UI as it is no longer needed
- Spawners always drop their item when broken — this is now handled by the game engine
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
Updated all 167 spawner block definitions (GatherType: Stones → SoftBlocks)
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
PerfectSpawner 1.3.1 — KatsuyaTV
PerfectSpawner v1.3 — Patch Notes
More than 160 icons have been updated using images from the corresponding NPCs.
![]()
![]()
Holograms
Spawners & Chunks
- New compact single-line format: Goblin Spawner • 2 mobs/10s • Max 4
- Stack count displayed when > 1: Goblin Spawner x3 • 6 mobs/10s • Max 12
Translations
- Spawners only tick when their chunk is loaded (compatible with MobFarmingTools)
- Fixed a bug where spawners were removed from the registry when their chunk was unloaded
Upgrade Note
- Updated all 5 languages (EN, FR, ES, DE, IT)
- Delete PerfectSpawner-1.2.jar from your Mods/ folder before adding PerfectSpawner-1.3.ja
