← All plugins
GlymeraFakePlayers icon

GlymeraFakePlayers

Populate your server with fake players: randomized player skins, NPC wandering, chat simulation, tab list presence, and built-in query support for all major server list protocols. Realistic 24h day/night player count curve.

v9.0.0 Hytale 0.6.x UtilityMiscellaneous

Gallery

Description

GlymeraFakePlayers - Realistic Fake Player Simulation

Populate your server with fake players: real player skins, NPC wandering, chat messages, tab list, and built-in server query support for all major protocols. Fully configurable with realistic day/night player count curves.


What is GlymeraFakePlayers?

GlymeraFakePlayers makes your server look alive — even when no one is online. It generates fake players with randomized player skins (using Hytale's character creator system), shows them in the tab list, sends realistic chat messages, and reports inflated player counts to every major server list protocol. Optionally, it spawns physical NPCs that walk around with player models and custom names.

A configurable 24-hour day curve automatically adjusts the number of online fake players — low at night, peak in the evening — with smooth transitions and random fluctuation for a natural feel.

All commands are OP-only.


Features

Fake Player Identities

  • Randomly selected names from a configurable pool (110 default names)
  • Each fake player gets a unique UUID for consistent identification
  • Names appear in tab list, chat, and server query responses

Player Skins (Character Creator)

  • NPCs use Hytale's full character customization system (hair, clothing, face, etc.)
  • Every fake player gets a unique randomized appearance
  • Skins are generated using CosmeticsModule.generateRandomSkin() — same system as real players

Physical NPCs (Optional)

  • Spawnable player-model NPCs that walk around with realistic wander behavior
  • Custom names above their heads (Nameplate system)
  • Physical body (new in v7): walking into them gently pushes you apart, just like a real player — configurable (soft / hard / off)
  • Invulnerable — players cannot kill them (no damage, no knockback, no hurt reaction)
  • Configurable spawn location (/fp setspawn) and spawn radius
  • NPC count is independent from tab list count (e.g. 50 in tab, 5 NPCs)
  • NPCs are automatically despawned on server shutdown (prevents world corruption)

Chat Simulation

  • Random chat messages from configurable pool (100 default messages)
  • Messages use Hytale's native chat format — indistinguishable from real player chat
  • Configurable interval (default: 45–180 seconds between messages)
  • Only active fake players send messages

Tab List

  • Fake players appear in the server's player list with realistic ping values
  • Ping values vary randomly (25–110ms) on each update cycle
  • Players are added/removed from tab list as the day curve adjusts

Server Query Protocols (Built-in)

No additional query plugin needed! GlymeraFakePlayers responds to all 5 major protocols:

Protocol Transport Used By
HyQuery V1 UDP (Magic: HYQUERY\0) Hyvote, HytaleCharts
HyQuery V2 UDP (Magic: HYQUERY2) Hyvote (with challenge token)
OneQuery V2 UDP (Magic: ONEQUERY) HytaleOne, HytaleServerIndex
Minecraft Ping TCP (Server List Ping) Minecraft-compatible tools
Source Query (A2S) UDP (Valve protocol) Steam Server Browser, GameTracker

All protocols report the same inflated player count (real + fake players).

Realistic Day/Night Curve

  • 24-hour player count curve with configurable hourly percentages
  • Cosine interpolation between hours for smooth, step-free transitions
  • Random fluctuation (default ±5%) for natural variation
  • Automatic adjustment every 60 seconds (1–2 players at a time)
  • Server startup instantly applies the correct count for the current time

Default Curve (EU gaming pattern):

Time % Time % Time %
00:00 15% 08:00 15% 16:00 65%
02:00 8% 10:00 25% 18:00 85%
04:00 5% 12:00 40% 20:00 100%
06:00 8% 14:00 50% 22:00 70%

Commands

Command Description
/fp list Show all fake players and their status
/fp reload Reload config, regenerate identities and skins
/fp respawn Despawn and respawn all NPCs near you
/fp chat Trigger a fake chat message immediately
/fp clear Remove all fake players (NPCs + tab list)
/fp setspawn Set NPC spawn location to your current position
/fp clearspawn Clear fixed spawn — NPCs spawn near players again

Configuration

All settings are in mods/de.glymera_GlymeraFakePlayers/config.json (auto-generated on first start):

Setting Default Description
maxFakePlayers 10 Maximum fake players (tab list, chat, query count)
maxSpawnedNPCs 5 Maximum physical NPCs in the world
spawnNPCs true Enable/disable physical NPC spawning
npcSpawnRadius 5 Radius around spawn point for NPC placement
npcSpawnLocation null Fixed NPC spawn [x,y,z] — null = near players
npcCollision "soft" NPC body: soft = push apart like a real player, hard = solid, off = walk-through
chatEnabled true Enable/disable fake chat messages
chatIntervalMin 45 Minimum seconds between chat messages
chatIntervalMax 180 Maximum seconds between chat messages
queryEnabled true Enable/disable built-in query protocol responses
dynamicPlayerCount true Enable/disable 24-hour day curve
fluctuation 0.05 Random noise range (0.05 = ±5%)
hourlyCurve [0.15, 0.10, ...] 24 values (0.0–1.0), one per hour
serverMotd "A Hytale Server" MOTD shown in query responses
joinLeaveMessages true Show fake join/leave messages
names [110 names] Name pool — must have at least maxFakePlayers entries
messages [100 messages] Chat message pool

Setup Examples

Minimal: Just inflate player count (no NPCs, no chat)

{
  "maxFakePlayers": 50,
  "spawnNPCs": false,
  "chatEnabled": false
}

Populated spawn area

{
  "maxFakePlayers": 80,
  "maxSpawnedNPCs": 15,
  "npcSpawnLocation": [100, 65, 200],
  "npcSpawnRadius": 10
}

High-population server feel

{
  "maxFakePlayers": 200,
  "maxSpawnedNPCs": 25,
  "chatIntervalMin": 15,
  "chatIntervalMax": 60
}

Important Notes

  • Names pool size: Must contain at least as many names as maxFakePlayers. If the pool is smaller, the fake player count is capped to the number of available names.
  • NPC world corruption prevention: All NPCs are automatically despawned when the server shuts down. This prevents corrupted model references in saved chunks.
  • Map visibility: Fake players do NOT appear as position markers on the world map. They appear in the tab list sidebar only.
  • Safe config editing: A config.json with a syntax error is never overwritten. The plugin keeps running on its previous values, logs the exact error to the server console, and leaves your file untouched so you can fix it and /fp reload.
  • Upgrading from older versions: Data is migrated automatically from plugins/GlymeraFakePlayers/ to mods/de.glymera_GlymeraFakePlayers/ on first start — your config is adopted unchanged.
  • Query protocol compatibility: The built-in query handler replaces the need for HyQuery, OneQuery, or PingProtocol plugins. If you run one of those alongside this plugin, both will respond to queries.

Version

v7.0.0 — Includes asset pack (IncludesAssetPack: true) for the NPC role definition.

Changelog

GlymeraFakePlayers - Changelog

v9.0.0 (2026-08-28)

Fixed

  • No fake players on Hytale 0.6.0 when using a fixed spawn location (/fp setspawn): since 0.6.0 the engine silently unloads ("parks") any entity spawned into a chunk section that is loaded but not ticking, and reports it as Unable to handle non-spawned entity: GlymeraFakePlayer!. The spawn on player join happened wherever the player was - usually far from the spawn location - so all NPCs vanished immediately and the plugin never retried. Now the plugin only spawns while a real player is within 64 blocks of the spawn location, and a background task retries deferred spawns (with backoff) until they succeed.
  • NPCs spawned inside terrain: the spawn height was always "spawn location Y + 0.5" with up to 7 blocks of horizontal spread, so on uneven ground some NPCs ended up buried in a hillside. The spawn now looks for standable ground (air with a solid block below) within ±6 blocks of the spawn height.

Changed

  • /fp setspawn now also remembers the world of the spawn location (npcSpawnWorld in config.json); old configs without it keep working (any world).
  • /fp list shows the position of every spawned NPC.
  • /fp respawn tells you when the spawn location is out of range instead of claiming to respawn.

v8.0.0 (2026-08-28)

Changed

  • Rebuilt for Hytale Update 6 (0.6.0, protocol hytale/3). Player commands use the new permission API (requireNoPermission()), so /fp works for OPs exactly as before.

Fixed

  • (v7.2.0, folded in) Orphan fake-player NPCs from earlier sessions are removed by the 30-second sweep even when they still carry a skin: every NPC with our role whose UUID was not spawned by this session is treated as an orphan.

v7.0.0 (2026-06-11)

Added

  • Physical NPCs (collision): Fake players now have a physical body. Walking into them gently pushes you apart - just like bumping into a real player. They remain fully invulnerable (no damage, no knockback, no hurt reaction). New config setting npcCollision:
  • "soft" (default) - gentle push apart, feels like a real player
  • "hard" - solid obstacle
  • "off" - old behavior, walk-through
    Collision is enforced client-side via the engine's native hitbox collision system - no server-side position correction involved.

Changed

  • Data directory moved to mods/: All data now lives in mods/de.glymera_GlymeraFakePlayers/ (the official per-plugin data directory) instead of plugins/GlymeraFakePlayers/. Existing installations are migrated automatically on first start: your config.json is adopted unchanged and the old folder is renamed to GlymeraFakePlayers_migrated.

Fixed

  • Config no longer resets itself: Previously, a syntax error in a hand-edited config.json (a missing comma, a stray bracket, a Windows editor BOM) was silently swallowed - and the plugin then overwrote the file with defaults, wiping all your edits. Editing bot names or counts could feel impossible. Now:
  • A broken config.json is never overwritten - your edits stay in the file.
  • A clear error with the exact line/position is written to the server log.
  • Fix the file and run /fp reload (or restart) - no data lost.
  • UTF-8 BOM from Windows editors is tolerated.

v2.0.0 (2026-04-11)

Bug Fixes

  • Chunk Load Crash (Scale Bug): Fixed a Hytale engine bug where Model.ModelReference.DEFAULT_PLAYER_MODEL has scale = -1.0f, causing "Scale must be greater than 0" errors when chunks containing NPC entities were loaded. Fix: Reflection override sets DEFAULT_PLAYER_MODEL.scale = 1.0f at plugin startup.
  • NPC Duplication: Fixed an issue where 100+ fake player NPCs would accumulate in the world after multiple player joins or world changes. Root cause: onPlayerJoin() spawned new NPCs without removing existing ones, and transient spawned flags reset on server restart. Fix: Added forEachChunk scan that removes all stale GlymeraFakePlayer NPCs before spawning a new batch.
  • Shutdown Cleanup: NPCs are now properly despawned during plugin shutdown to prevent them from being persisted into chunk data.

Technical Details

  • setup() now patches DEFAULT_PLAYER_MODEL.scale via reflection before any NPC spawning occurs
  • onPlayerJoin() iterates all chunks with NPCEntity components, identifies stale NPCs by role name "GlymeraFakePlayer", and removes them via store.removeEntity(ref, RemoveReason.REMOVE) before calling spawnAllFakePlayers()
  • shutdown() iterates all fake players and removes their entities from all worlds
  • onPlayerDisconnect() marks all NPCs as unspawned when the last real player leaves

v1.0.0 (2026-04-08)

  • Initial release
  • Fake player NPCs with configurable names and skins
  • Dynamic player count with day/night curve
  • Tab list integration
  • Query protocol support (Minecraft-compatible)
  • Chat simulation with configurable messages
Public — visible to everyone. No account needed.

Only Marc can read this.