DGuard

NPCs on a Minecraft server: Citizens, FancyNpcs and more

NPCs are non-player characters: a shopkeeper in the lobby, a guide to the game modes, a quest giver. Vanilla Minecraft has none — a plugin adds them. We compare Citizens, FancyNpcs and ZNPCsPlus using facts from their docs, show the first commands, and explain why an NPC running console commands is a security question.

The DGuard team7 min read

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

CitizensFancyNpcsZNPCsPlus
Server softwarePaper, SpigotPaper and Folia only (Paper forks should work)Spigot, Paper, Folia
CodeOpen source, OSL-3.0Open source, MITOpen source, GPL-3.0
Packet NPCsHas a packet mode (/npc packet)Packet-only — the authors say the server does almost no extra workPacket-only — in the authors' words, "nothing is ran on the main thread"
MovementRoutes: /npc path, /waypointsNone — 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, waitsCommands and switching servers on a network
PlaceholderAPIIn NPC commandsIn the name overhead and in messagesOptional dependency
VersionsOnly the latest patch of each version is supported; the source has modules up to 26.3Up to 26.3 on Modrinth; each version supported for 18 monthsREADME: 1.8–26.2 (Jenkins builds); last release 2.0.0 — December 2024, up to 1.21.4
Plugins in alphabetical order. From the docs and the projects' GitHub and Modrinth pages

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.

Citizens: a guide NPC at spawn
/npc create Guide
/npc skin Notch
/npc lookclose
/npc command add -p help
/npc command add --cooldown 10s tp <p> 0 64 0
  • /npc skin sets a skin from a name, URL or file; /npc lookclose makes the NPC turn to nearby players.
  • /npc command add with no flags runs the command as the server; -p runs it as the clicking player; <p> fills in the player's name.
  • -l makes it a left-click command (may not work with PvP off), -r right-click (the default). --cooldown is a per-player pause, --n caps 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 path toggles the waypoint editor, /npc equip the equipment editor, /npc hologram controls 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.

FancyNpcs: an NPC that sends players to the skyblock server
/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 skyblock

send_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 -o flag in Citizens and the player_command_as_op action 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 not console_command. Manage this with LuckPerms.
  • Limits on rewards. If an NPC hands out items, set --cooldown and --n in Citizens, or interaction_cooldown and block_until_done in 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

All sections

Run the best anticheat for modern Minecraft

DGuard catches all 47 kinds of cheats in our comparison — the closest rival, Intave, has 27. Full protection on every plan, free up to 30 players online.