In short: if your NPCs need to walk routes, guard or fight, use Citizens, the oldest and most capable NPC plugin. If you need stationary lobby NPCs that send a message, run a command or move the player to another server on click, use FancyNpcs: it shows NPCs through packets, runs on Paper and Folia, and an NPC takes two or three commands. ZNPCsPlus is packet-based too and supports Spigot, but its current builds only come out on its Jenkins. Run a single NPC plugin: Citizens and FancyNpcs both register the /npc command.
What servers use NPCs for
- Lobby navigation. An NPC by the portals sends the player to a game mode — on a network through the proxy, see server networks.
- Shops and services. A click opens a shop, blacksmith or bank menu — the menu itself comes from a separate plugin, see menus and GUIs.
- Quests and story. An NPC hands out tasks, talks to the player and leads them through the world.
- Decoration. Statues of top players, characters at spawn, text overhead — for text without an NPC there are holograms.
NPC plugins compared
| Citizens | FancyNpcs | ZNPCsPlus | |
|---|---|---|---|
| Server software | Paper, Spigot | Paper and Folia only (Paper forks should work) | Spigot, Paper, Folia |
| Code | Open source, OSL-3.0 | Open source, MIT | Open source, GPL-3.0 |
| Packet NPCs | Has a packet mode (/npc packet) | Packet-only — the authors say the server does almost no extra work | Packet-only — in the authors' words, "nothing is ran on the main thread" |
| Movement | Routes: /npc path, /waypoints | None — per its FAQ there's no movement system yet | — |
| Click actions | /npc command: as server or player, cooldowns, use limits, a cost per click | /npc action: message, player or console command, send to server, permission check, waits | Commands and switching servers on a network |
| PlaceholderAPI | In NPC commands | In the name overhead and in messages | Optional dependency |
| Versions | Only the latest patch of each version is supported; the source has modules up to 26.3 | Up to 26.3 on Modrinth; each version supported for 18 months | README: 1.8–26.2 (Jenkins builds); last release 2.0.0 — December 2024, up to 1.21.4 |
Citizens: first commands
Citizens creates an NPC with /npc create and selects it straight away, so the next commands apply to it. You select another NPC with /npc select <id or name> or by right-clicking it with a stick (the item is configurable). /npc help lists the commands of your exact version — the Citizens wiki itself warns it's updated less often than the plugin.
/npc create Guide
/npc skin Notch
/npc lookclose
/npc command add -p help
/npc command add --cooldown 10s tp <p> 0 64 0/npc skinsets a skin from a name, URL or file;/npc lookclosemakes the NPC turn to nearby players./npc command addwith no flags runs the command as the server;-pruns it as the clicking player;<p>fills in the player's name.-lmakes it a left-click command (may not work with PvP off),-rright-click (the default).--cooldownis a per-player pause,--ncaps how many times a player can use it.- On BungeeCord or a proxy that speaks its protocol,
/npc command add -p server <server>sends the player to another server. /npc pathtoggles the waypoint editor,/npc equipthe equipment editor,/npc hologramcontrols lines of text above the NPC.
FancyNpcs: first commands
In FancyNpcs every command names the NPC. The name overhead supports MiniMessage, PlaceholderAPI and MiniPlaceholders. Actions are bound to a trigger: right_click, left_click or any_click.
/npc create skyblock
/npc skin skyblock Notch
/npc displayname skyblock <green>Skyblock</green>
/npc turn_to_player skyblock true
/npc action skyblock any_click add message <gray>%player_name%, off to Skyblock…</gray>
/npc action skyblock any_click add send_to_server skyblocksend_to_server goes through the proxy's messaging channel: velocity.toml needs bungee-plugin-message-channel = true — see Velocity setup. Placeholders in messages come from PlaceholderAPI. Moving from Citizens? FancyNpcs has a converter for its NPCs.
Security: console commands
An NPC that runs a command as the server effectively hands a sliver of the console to anyone who clicks it. That's fine in itself — Citizens even recommends running commands as the server with <p> filled in rather than giving the player OP. The danger lies elsewhere:
- Temporary OP. The
-oflag in Citizens and theplayer_command_as_opaction in FancyNpcs make the player an operator for the duration of the command. The FancyNpcs docs call this a security risk outright, and Citizens warns of side effects. Do without them. - NPC editing rights for admins only. Whoever can add a console command to an NPC can run anything through it. FancyNpcs grants each action type separately (
fancynpcs.command.npc.action.add.<type>), so a builder can be allowed messages but notconsole_command. Manage this with LuckPerms. - Limits on rewards. If an NPC hands out items, set
--cooldownand--nin Citizens, orinteraction_cooldownandblock_until_donein FancyNpcs — otherwise the reward gets farmed by rapid clicking.
NPCs and performance
The Citizens FAQ gives no limit on the number of NPCs: the load depends on your hardware, on whether NPCs move and keep chunks loaded, and idle NPCs far from players are barely processed. It recommends checking with the spark profiler — see the spark profiler. FancyNpcs and ZNPCsPlus send NPCs to players as packets and, according to their authors, add almost no work for the server.
Which one to pick
- Guards, pets, NPCs with routes and combat, large quest systems — Citizens: it's the only one in this comparison with route movement.
- A Paper or Folia lobby: navigator, shop, greeter — FancyNpcs.
- A server on Spigot or an older version — ZNPCsPlus or Citizens; FancyNpcs runs on Paper and Folia only.
NPCs and fair fights
A lobby NPC sends players to the game modes, and the fights there have to be fair. Lobby and minigame plugins often teleport a player to an NPC or an arena and turn them to face it — and the NoRotate cheat throws that rotation away so KillAura doesn't lose its target. DGuard — the best anticheat for a modern Minecraft server — checks NoRotate along with the other cheat types in the comparison: 47 in all, where the nearest rival, Intave, has 27. It gathers evidence on every front at once — combat, movement, packets, inventory, building, world — doesn't rush to a verdict, and you set how strict punishments are.
FAQ
How do I make an NPC on a Minecraft server?
Install an NPC plugin such as Citizens or FancyNpcs and run /npc create <name>. Set the skin with /npc skin and a click action with /npc command add in Citizens or /npc action in FancyNpcs.
How do I make an NPC that sends players to another server?
In FancyNpcs use the send_to_server <server> action; in Citizens, /npc command add -p server <server>. On Velocity, enable bungee-plugin-message-channel in velocity.toml.
Can I run Citizens and FancyNpcs together?
Better not: both register the /npc command. Pick one; FancyNpcs has a converter for moving over from Citizens.
Can FancyNpcs NPCs walk?
No. The FancyNpcs FAQ says there's no movement system yet. For NPCs with routes, use Citizens.
Is it safe to give NPCs console commands?
Yes, as long as the commands are fixed and only admins can edit NPCs. Avoid temporary OP — the -o flag in Citizens and player_command_as_op in FancyNpcs.
Sources
- Citizens: official site
- Citizens Wiki: commands
- Citizens Wiki: NPC click commands
- Citizens Wiki: FAQ
- Citizens Wiki: version support
- Citizens2 on GitHub
- FancyNpcs: documentation
- FancyNpcs: the /npc command
- FancyNpcs: action system
- FancyNpcs: FAQ
- FancyInnovations: Minecraft version support
- FancyNpcs on Modrinth
- ZNPCsPlus on GitHub
- DGuard, the best anticheat for a modern Minecraft server: checks compared with GrimAC, Vulcan, Polar, Intave and Matrix
- DGuard: installation, requirements and troubleshooting
- DGuard: supported Paper and Leaf versions