Compatibility
Minecraft: Java Edition
Platforms
Tags
Creators
Details
FakePlayers
Real fake players for Paper. Every bot is an actual server player with no client attached. The server treats it like anyone else who joined: it shows up in the tab list, @a and Bukkit.getOnlinePlayers(), takes damage, dies, respawns and keeps its own inventory.
No Fabric, no server fork. Drop the jar into plugins/ and you're done.
✨ Features
- Real players, not NPCs. Join/quit, damage, death and command events fire as they would for a normal player. Vanilla and plugin commands work on bots:
/give,/tp,/op,/gamemode, and so on. - Real physics. Gravity, collisions, swimming, fall damage and knockback are all simulated server-side every tick.
- Pathfinding. Built-in A* with no external libraries. Bots step up blocks, jump, drop down up to 3 blocks, go around obstacles and re-path when stuck.
- Actions like a real client. Attacks respect the attack cooldown. Right-click works on blocks, entities and items (eating, bows, placing blocks). Bots can also jump, sneak and switch hotbar slots.
- Commands as the bot.
/fake cmdruns any command with the bot's own permissions. - Skins. If a premium account with the same name exists, its skin is fetched from the Mojang API asynchronously. Otherwise the bot gets the default skin.
- Persistence. Bots are saved to
bots.ymland spawn again after a restart. The server keeps their inventory and stats like it does for any player. - Resource packs. Bots accept server resource packs automatically, so a required pack won't leave them hanging.
- Clean removal. Bots leave like a normal disconnect, with no leaks. All bots are removed on shutdown and
/reload.
📜 Commands
All commands need fakeplayers.admin (op by default) and support tab completion.
| Command | Description |
|---|---|
/fake spawn <name> |
Spawn a bot at your location (from the console: the main world's spawn) |
/fake remove <name|all> |
Remove a bot |
/fake list |
List bots with world and coordinates |
/fake tp <name> |
Teleport a bot to you |
/fake follow <name> [player|stop] |
Follow a player (you by default) |
/fake goto <name> <x> <y> <z> |
Walk to a point (~ is relative to the bot) |
/fake look <name> <player|x y z> |
Look at a player or a point |
/fake attack <name> [once|continuous|stop] |
Attack the entity in front |
/fake use <name> [once|continuous|stop] |
Right-click with the held item |
/fake jump <name> [once|continuous|stop] |
Jump |
/fake sneak <name> <on|off> |
Sneak |
/fake slot <name> <1-9> |
Select a hotbar slot |
/fake cmd <name> <command> |
Run a command as the bot |
/fake chat <name> <message> |
Send a chat message as the bot |
⚙️ Config
respawn-on-death: true # false = the bot is removed when it dies
respawn-delay-ticks: 20
restore-on-startup: true
max-bots: 20
load-skins: true
show-join-quit-messages: true
🔌 Compatibility
Paper 1.21.11 only. The plugin uses server internals, so other versions are not supported. Bots go through the regular login events (AsyncPlayerPreLoginEvent and PlayerLoginEvent). This lets permission plugins such as LuckPerms load their data. It is also designed to play well with SkinsRestorer and Multiverse-Core. Bots use offline-mode UUIDs generated from their name.
💡 Use cases
AFK farms and chunk loading, testing plugins and minigames, debugging permissions, and server demos.
🐛 Issues
Found a bug or a plugin conflict? Please open an issue and include your server log.


