All Mods Resource Packs Data Packs Shaders Modpacks Plugins
CustomNPCs

CustomNPCs

by Foxikle • Downloads: 0 • Followers: 0
Description
Gallery
Changelog
Versions

CustomNPCs

A powerful, configurable NPC plugin for Paper servers.

Paper


Looking for contributors!

If you're interested in contributing to the project, please reach out! I'm looking for help maintaining the project <3


✨ Features

🎨 Appearance

  • Names longer than 16 characters — break vanilla's character limit
  • MiniMessage color support — gradients, rainbow names, hex colors, and more
  • Fully customizable skins — use any player skin or custom texture
  • Armor & item display — equip NPCs with any gear you can imagine
  • Multiline Holograms — Create NPCs with as many hologram lines as you'd like

⚡ Interaction Actions

Trigger actions when players interact with an NPC:

Action Description
Send Message Send a custom chat message to the player
Display Title Show a title/subtitle on screen
Action Bar Display text in the action bar
Play Sound Play any in-game sound
Run Command Execute a command as the player or console
BungeeCord / Velocity Send the player to another server
Teleport Teleport the player anywhere
Give / Remove XP Modify player experience
Give / Remove Potion Effect Apply or clear potion effects
Follow Preset Path Walk in a pre-recorded path

Each action has a configurable delay and cooldown!

🧠 Behavior

  • Look at players — NPCs track nearby players naturally
  • Configurable idle direction — set a default look direction when not tracking
  • Flexible persistence — choose between session-only NPCs (cleared on restart) or fully persistent NPCs that survive restarts
  • Conditional Actions — Execute specific actions under certain circumstances

🌍 Translations

CustomNPCs supports multiple languages! If you speak a language other than English and want to contribute, join the translation effort on Crowdin:

👉 Translate on Crowdin

Don't see your language listed? Send @foxikle a DM on Discord or open a ticket in the support server to request it.


🛠️ Developer API

Integrate CustomNPCs into your own plugins with the provided API.

Resource Link
GitHub Wiki github.com/Foxikle/CustomNPCs/wiki
Plugin Wiki docs.foxikle.dev
Javadocs Javadoc (1.8.0)

📊 Statistics

bStats


🐛 Support & Bug Reports

Encounter a bug or need help? Here's where to go:


❤️ Support the Project

If CustomNPCs has been useful to you, consider supporting development!

Patreon · PayPal · GitHub Sponsors


CustomNPCs is open source. Contributions, translations, and feedback are always welcome.

All Versions

+ Add Version
Name Game version Platforms Published Downloads Actions
26.2 26.1.x 1.21.x +1
Paper
1d ago 1
26.2 26.1.x 1.21.x +1
Paper
1d ago 1
26.2 26.1.x 1.21.x +1
Paper
1d ago 1
26.2 26.1.x 1.21.x +1
Paper
1d ago 1
26.2 26.1.x 1.21.x +1
Paper
1d ago 1
26.1.x 1.21.x 1.20.x
Paper
1d ago 1
1.21.x 1.20.x
Paper
1d ago 1
1.21.x 1.20.x
Paper
1d ago 1
1.21.x 1.20.x
Paper
1d ago 1
1.21.x 1.20.x
Paper
1d ago 1
1.21.x 1.20.x
Paper
1d ago 1
1.21.x 1.20.x
Paper
1d ago 1
1.21.x 1.20.x
Paper
1d ago 1
1.21.x 1.20.x
Paper
1d ago 1
1.21.x 1.20.x
Paper
1d ago 1
1.21.x 1.20.x
Paper
1d ago 1
1.21.x 1.20.x
Paper
1d ago 1
1.21.x 1.20.x
Paper
1d ago 1
1.21.x 1.20.x
Paper
1d ago 1
1.21.x 1.20.x
Paper
1d ago 1
1.21.x 1.20.x
Paper
1d ago 1
1.21.x 1.20.x
Paper
1d ago 1
1.21.x 1.20.x
Paper
1d ago 1
1.21.x 1.20.x
Paper
1d ago 1
1.21.x 1.20.x
Paper
1d ago 1
1.21.x 1.20.x
Paper
1d ago 1
1.21.x 1.20.x
Paper
1d ago 1
1.21.x 1.20.x
Paper
1d ago 1
1.21.x 1.20.x
Paper
1d ago 1
1.21.x 1.20.x
Paper
1d ago 1
1.20.x
Paper
1d ago 1
1.20.x
Paper
1d ago 1
1.20.x
Paper
1d ago 1
1.20.x
Paper
1d ago 1
1.20.x
Paper
1d ago 1
1.20.x
Paper
1d ago 1
1.20.x
Paper
1d ago 1
1.20.x
Paper
1d ago 1
1.20.x
Paper
1d ago 1
1.20.x
Paper
1d ago 1
1.20.x
Paper
1d ago 1
1.20.2
Paper
1d ago 1
1.20.2
Paper
1d ago 1
1.20.2
Paper
1d ago 1
1.20.2
Paper
1d ago 1
1.20.2
Paper
1d ago 1
1.20.2
Paper
1d ago 1
1.20.x
Paper
1d ago 1
1.20.x
Paper
1d ago 1
1.20.x
Paper
1d ago 1
1.20.x
Paper
1d ago 1
1.20.x
Paper
1d ago 1
1.20.x
Paper
1d ago 1
[1.8.2] Bug Fixes by Foxikle on Oct 12, 2026
Download
## What's Changed
  • Fixed flipped codec mapping causing NPCs pitch and yaw to be flipped
  • Fixed removing items from an NPC breaking the config
  • Fixed issues with Mineskin initialization preventing downloading Skins from URLs
  • Fixed NPCs spawning at 0,0,0 if their pose was set to SITTING and their location was far away
  • Fixed default settings corruption causing new npcs created to be clones of other NPCs
[1.8.1] CustomNPCs 1.8.1 by Foxikle on Oct 12, 2026
Download
# What's changed?
  • Fixed the wrong config key being the default for the storage section
  • Fixed the storage provider never being initialized on the very first launch of the plugin
  • Fixed the default config being 1 behind the latest, which fixed the aforementioned bug

TY to Katsumii for reporting these <3

Cheers!

\~ Foxikle
[1.8.0] CustomNPCs 1.8.0 by Foxikle on Oct 12, 2026
Download
# What's Changed
  • New storage options:
  • Local Storage (Default): Stores data in a file on the server.
  • MySQL: Stores data in a SQL Database (Good if you already have one)
  • MongoDB: Stores data in a MongoDB document (Ideal)
  • Conditional Injection (Api only for now): Ensure certain conditions are met prior to spawning the NPC
  • Support for PluginUpdater
  • Removed support for very old NPC file versions (<1.6- no known users of the plugin this old)
  • new command to import data into a storage provider: /npc movedata <conflict-resolution>
  • new config fixer to fix NPCs with 0 hologram lines
  • added support for empty hologram lines with %empty%
  • the update checker now runs once per hour instead of only on startup

# Fixes
  • Fixed being able to make NPCs have 0 config lines

# Api Changes
  • Removed deprecated methods NPCApi#initialize, NPC#setPostion, NPC#setLegacyActions Settings#direction, LegacyAction
  • Reworked action serialization, [read the wiki for details](https://docs.foxikle.dev/docs/api/Writing-Custom-Actions).
  • Moved some action condition classes around, most notably Condition#SelectionMode is now Selector
  • Settings now has a builder
  • Equipment now uses null for empty slots, not AIR`. Setting a slot to air will now set it to null.
  • CustomNPCs is now in maven central! You no longer need to (and shouldn't) https://repo.foxikle.dev. It will be taken down soon.

## IMPORTANT NOTE: Any preset walking paths created before this release are sadly incompatible, and need to be re-recorded. This was because of some glaring issues with storage efficiency that I needed to address. I am sorry for the inconvenience if that effected you. According to my analytics, there are no current uses of the action, though.

Cheers!
Foxikle <3
[1.7.10] CustomNPCs 1.7.10 by Foxikle on Oct 12, 2026
Download
## What's Changed
  • 26.1 and 26.2 support
  • Added the new FollowPresetPath Action!
  • This action allows an NPC to follow a pre-recorded path. It has an option to enable "looping", which will make it teleport to the beginning of the path and start again automatically. It is planned to have the action start on NPC load, as to not need a player interaction to start it.
  • Upgrade adventure to version 5
  • Reworked the commands to use vanilla Brig
  • Removed support for 1.20-1.20.4**
  • This is due to obfuscation changes which make maintaining these versions more burdensome than they are worth. Very few users use this version, so I felt it was the correct decision for the long term longevity of the project.
  • Fixed a couple of misc bugs
  • NPCs can have now empty hologram lines with %empty%
  • Added a tip to inform players they can Sneak + Click NPCs to open the edit dialog
  • NPCs can no longer have 0 hologram lines.
  • Added a config fixer to recover NPCs who have 0 config lines, as that prevented the NPC from loading. (/npc fixconfig lines)
  • Fixed the NPC skin not being updated when changed on versions 1.21.9-26.2


If you have experience speaking a language other than English and are willing to donate your time to improve the plugin, please consider becoming a translator. You can reach out to @foxikle on Discord for more details. In exchange for helping me with the project, you get access to preview builds and exclusive development content.

Cheers <3
Added support for 26.2
## What's Changed
  • 26.1 support
  • Added the new FollowPresetPath Action!
  • This action allows an NPC to follow a pre-recorded path. It has an option to enable "looping", which will make it teleport to the beginning of the path and start again automatically. It is planned to have the action start on NPC load, as to not need a player interaction to start it.
  • Upgrade adventure to version 5
  • Reworked the commands to use vanilla Brig
  • Removed support for 1.20-1.20.4**
  • This is due to obfuscation changes which make maintaining these versions more burdensome than they are worth. Very few users use this version, so I felt it was the correct decision for the long term longevity of the project.
  • Fixed a couple of misc bugs
[1.7.9] CustomNPCs 1.7.9 by Foxikle on Oct 12, 2026
Download
Fix NullPointerException on player Join/Leave when a world was loaded after the server's initial start by @webhead1104
[1.7.8] CustomNPCs 1.7.8 by Foxikle on Oct 12, 2026
Download
Changes:
  • 1.21.11 support
  • Fixed some typos
  • Updated German and Russian translations
  • Added the Modrinth link to the update message.
[1.7.7] CustomNPCs 1.7.7 by Foxikle on Oct 12, 2026
Download
This release adds support for Minecraft version 1.21.10
[1.7.6] CustomNPCs 1.7.6 by Foxikle on Oct 12, 2026
Download
  • This update adds support for 1.21.9
  • Updated a few dependencies
[1.7.5] CustomNPCs 1.7.5 by Foxikle on Oct 12, 2026
Download
# New Features:
  • 1.21.5 - 1.21.8 support
  • NPC Poses
  • There are 6 possible poses: Standing, Sitting, Crouching, Swimming, Dying, and Sleeping.
  • NPC Nudging
  • Nudging is way to move NPCs a little bit at a time to precisely position them. Crouching while scrolling increases the move increment from .05 blocks per slot to .25 blocks per slot scrolled over.
  • Native Multi-line Holograms
  • Your existing names are automatically converted to the new system
  • The Ability to flip NPCs upside down
  • This option is accessed in the extra settings menu (Top right comparator)
  • The ability to add cooldowns to actions
  • The configuration of them is very similar to configuring delay. There is no message for an action being on cooldown.

# Bug Fixes
  • Fixed the UUID being visible with a teamless approach, which is much more tolerant to other plugins
  • Fixed being able to supply textual input to multiple actions at once
  • Fixed the sleeping percentage not being respected if it was changed after the server started
  • Fixed Elytras not being able to be equiped in the chest slot
  • Fixed problems with clicking items in the equipment menu
  • Changed the default NPC name to "An unnamed NPC"
  • NPC nametags follow a lot smoother
  • NPCs no longer have a visible armor stand riding them in spectator mode
  • NPCs now ignore spectators and do not look at them
  • Fixed importing skins from URLS
  • Fixed some issues with the commands library
  • Fixed errors with menus on latest paper versions
  • Fixed some issues with dependency downloading at runtime (Thanks paper!)

# Developer Changes
  • The NPC#moveTo(Location) was renamed to NPC#teleport(Location) as moveTo is reserved for other movement related features coming later :)
  • The Settings class now has a method to import a player's skin directly from a player object
  • NPCs no longer have "names", but rather an array of "lines". The get/set name methods are now deprecated and just affect the top line.
  • Poses can be changed in the settings object
  • Added a "facing" system, to be more consistent with how NPC yaw and pitch are handled.
  • Custom actions should call the Action#activateCooldown(UUID) in ther perform method.
Fixed the upside down button not working (whoops!)
This version adds the ability to flip NPCs upside down. This feature can be accessed in the extra settings menu.

![An image of the new extra settings menu](https://cdn.modrinth.com/data/cached_images/a344e03a21ddf9b8123bcc6ac23ce9e4b9cb3c2b.png)
  • Fixed the plugin not enabling on 1.21.8
  • Added cooldowns to actions, defaulting to 0.
Bug fixes:
  • Fixes errors with menus on latest paper versions
  • Other misc repo fixes

There are no visible changes this release.
Fixed library loading issues causing the plugin to not load
New Features:
  • 1.21.6-7 support

Bug Fixes:
  • Updated commands
  • Fixed importing skins from URLs
  • Fixed spectators not actually being ignored

Developer changes:
  • Added a "facing" system, to be more consistent with how NPC yaw and pitch are handled.
## New Features:
  • NPC Poses
  • NPCs can now be posed! There are 6 possible poses: Standing, Sitting, Crouching, Swimming, Dying, and Sleeping.
  • NPC Nudging
  • Nudging is way to move NPCs a little bit at a time to precisely position them. Crouching while scrolling increases the move increment from .05 blocks per slot to .25 blocks per slot scrolled over.
  • Native Multi Line Holograms
  • Instead of using the <newline> minimessage tag, you can now create separate lines. Your existing data will be converted automatically.

## Bug Fixes
  • Fixed a bug preventing Elytras from being equipable on the chest slot
  • Fixed some problems with the equipment menu
  • The default name of NPCs was changed from not set to An Unamed NPC
  • NPCs nametags should follow them a lot better now
  • NPCs no longer have a visible armor stand riding them in spectator mode
  • A bunch of minute fixes I didn't write down
  • NPCs now ignore spectators and won't look at them

## Developer changes
  • The NPC#moveTo(Location) was renamed to NPC#teleport(Location) as moveTo is reserved for other movement related features coming later :wink:
  • The Settings class now has a method to import a player's skin
  • NPCs no longer have "names", but rather an array of "lines". The get/set name methods are now deprecated and just affect the top line.
  • Poses can be changed in the settings object
  • This update can be used via the 1.7.5-pre2 api version

This update took way longer than it should have, but now it's here :)
\~ Foxikle <3
## New Features:
  • 1.21.5 support

## Bug Fixes
  • Fix npc UUID being visible by using a different (teamless) approach
  • Fixed being able to supply textual input for several actions at once
  • Fixed the sleeping percentage not being respected if it was changed after server start **

## Known Issues:
  • Dragging items in an inventory will throw an error. It is a result of the PaperMC developers not supporting bytecode rewriting on paper plugins. I cannot do anything about it, complain to them.
  • There is a rare kick that occurs when creating NPCs. I'm not sure what causes it, but I'm working on finding out.

## Roadmap:
Before 1.8 and the new data serializing and storage, I want to get the following features implemented:
  • Proper multi-line NPC holograms
  • Poses (sitting, swimming, etc)

###### Note about sleeping percentages: The plugin modifies the sleeping percentage to be equivalent to the percentage you supplied, correcting for the number NPCs. So if your server has a sleeping percentage of 100 and your world has 1 NPC, the percentage from running the command /gamerule playersSleepingPercentage will be 50.
[1.7.4] CustomNPCs 1.7.4 by Foxikle on Oct 12, 2026
Download
This is a pretty small release, but it fixes:
  • Injection issues on dimension change and join
  • Setting the sleeping percentage incorrectly
  • It now respects user defined sleeping percentages via the gamerule
[1.7.3] CustomNPCs 1.7.3 by Foxikle on Oct 12, 2026
Download
## This release includes mostly bug fixes from the past month
  • Fixed the display buttons in the teleport customizer menu always showing the X coordinate
  • Fixed the volume and pitch being reversed when playing a sound
  • Fixed the load order of dependencies
  • Created a new /npc debug command to help you help me help you. (When seeking support it provides useful information to me)
  • Made some minor improvements to injection logic around different dimensions
  • Added a config option to interpolate npc nametags on teleport
[1.7.2] CustomNPCs 1.7.2 by Foxikle on Oct 12, 2026
Download
  • IMPORTANT NOTE**: This release REMOVES the ability to use this plugin on a spigot server. As a bonus of this, the plugin will now load the required dependencies at runtime. This makes the final jar file a lot smaller (about 10 times smaller!). The downside is it can take a "while" (about 2 minutes, in my case) to download the required dependencies. This is advantageous, as it stores the downloaded dependencies and only needs to download them once!

Okay on with the patch notes:

## Bug Fixes
  • Fixes errors on 1.21.3+ servers when using like anything on the server
  • Fixes hologram injection issues in some cases
  • The SetSound action now uses keyed sounds (minecraft:ui.button.click), instead of ui_button_click. This is potentially detrimental as it will not convert from old sounds. (The actions still run, a warning is printed to the console and no sound is played). BUT, this lets you play resource pack sounds now! Just use the namespace and the sound id. namspace:id.

This is mostly a bug fix type of update as I have started working on the 1.8 series of updates, starting with optimized data storage. So you can look forward to that ;)
Foxikle <3
CustomNPCs v1.7.1

  • Fixed critical bug with condition parsing, preventing NPCs from loading
  • Fixed the config being backed up every time the server started
[1.7] CustomNPCs 1.7 by Foxikle on Oct 12, 2026
Download
# CustomNPCs 1.7

  • I discovered that the Bukkit configuration api has decided to eat locations when they are invalid. There is nothing I can do to recover them. I apologize for the inconvenience**

## New Features
  • 1.20.5 - 1.21.4 Support.
  • Localization! CustomNPCs now supports the following languages:
  • Russian (partially)
  • German (partially)
  • Arabic (partially)
  • Simplified Chinese (fully)
  • Vietnamese (fully)
  • English (fully)
  • An action System rewrite
  • Custom Actions can be registered via the API
  • the RunCommand action can now run commands as the console **please be careful**
  • The RunCommand action will now parse placeholders in the raw command text
  • The DisplayTitle action can now have a subtitle
  • Various performance enhancements
  • A new command /npc fixconfig:
  • Requres the customnpcs.commands.fix_config permission
  • Here is some example usage, with an explanation: /npc fixconfig world <Valid World> <Strategy> <target>
  • The Valid World has to be a world that is loaded by Bukkit (Multiverse should work too)
  • The strategy can either be NONE, which doesn't care about validating the location of the NPC. the SAFE_LOCATION strategy will verify the NPC won't be stuck in any solid blocks. If it is, the plugin will pick the highest block with the same x and z coordinate. If no position is possible, the NPC is ignored.
  • The Target can either be all, to apply to all NPCs or a specific NPC's name or UUID
  • A new command framework
  • The NPC configuration is validated on the first parse, rather than on load
  • There is now a special permission for the wiki command; customnpcs.commands.wiki


## Bug Fixes:
  • Fixed a bunch of injection issues causing NPCs to not appear properly
  • Fixed NPCs affecting the sleeping percentage
  • Fixed NPCs disappearing after respawning
  • Fixed NPCs being injected in the wrong dimension
  • Fixed NPC nametags being visible (The numbers and letters)
  • Fixed a bunch of errors related to the events portion of the api
  • Fixed an error with /reload
  • Fixed an issue where you could not decrease the DisplayTitle's fade out option if the fade in option was 1
  • Fixed loading the NPC's facing direction incorrectly

## Developer Changes
  • Removed the Bukkit services api (Not like anyone used it)
  • Settings#direction is now deprecated. You should use the yaw of the SpawnLocation instead
  • You can write your own actions. Read the documentation to find out how :)

## Bug fix:
  • Fixed loading the NPC's facing direction incorrectly

# CustomNPCs prerelease 11
  • This release is comprised of entirely bug fixes, as the full release is very near*

## Bug Fixes
  • The /npc fixconfig command now requires the permission customnpcs.commands.fix_config
  • Fixed the /npc help and /npc manage commands being missing
  • Fixed an error (that only appears in the console) upon translating an empty string in some action favicons
  • Fixed an issue where you could not decrease the DisplayTitle's fade out option if the fade in option was 1
  • Maybe fixed an issue with the menus when setting an input



That's it

Foxikle <3
# New Features
  • /npc fixconfig command.
  • Here is some example usage, with an explanation: /npc fixconfig world <Valid World> <Strategy> <target>
  • The Valid World has to be a world that is loaded by Bukkit (Multiverse should work too)
  • The strategy can either be NONE, which doesn't care about validating the location of the NPC. the SAFE_LOCATION strategy will verify the NPC won't be stuck in any solid blocks. If it is, the plugin will pick the highest block with the same x and z coordinate. If no position is possible, the NPC is ignored.
  • The Target can either be all, to apply to all NPCs or a specific NPC's name or UUID
  • A new command framework that utilizes Brigadier
  • The NPC configuration is validated on the first file parse, rather than on loading.
  • There is now a special permission for the /npc wiki command, customnpcs.commands.wiki

# Bug Fixes
  • /reload no longer throws an error
  • Using the skin catalog no longer throws an error

# Developer Changes
The Bukkit services api has been removed. Its not like anyone actually used it.

  • I have recently discovered that the Bukkit configuration api has decided to eat locations when they are invalid. There is nothing I can do to recover them. I apologize for the inconvenience**

Thats it <3

Foxikle
This is a hotfix for 1.7-pre8 that addresses issues with upgrading the NPC file
## New Features

  • 1.21.3 support
  • Support for the following languages (Not all are fully complete) -> German, Russian, Chinese
  • The language is determined by the client's locale, defaulting to English.

## Bug Fixes
  • Fixed a bunch of errors around the API Events
  • Fixed a bunch of Nametag related issues
  • Fixed the teams problem (Hopefully for the final time)
  • Fixed NPCs being injected in the wrong world (Only on new versions, it as fixed on older ones)
  • A pile of performance enhancements

## API Changes
  • Setting the location now overwrites the direction settings object
  • BREAKING**: In order to register an object, you must call CustomNPCs.ACTION_REGISTRY.register("ID", Action.class, Action::creationButton) or whatever you name your creation button method. An example method is below.
  • The method Action#getFavicon have been refactored to Action#getFavicon(Player) (For better localization support)
  • The corresponding API version for this release is 1.7-pre8

And probably a bunch of other small tweaks and stuff.

# I am looking for Translators!
If you speak a language other than English and are interested in helping me translate please reach out. You can make a ticket or just DM me on Discord. In exchange for translating, you get a swanky @Translator role, and access to the perks of being a supporter! (This means builds of preview features much much sooner than everyone else.) More info at https://crowdin.com/project/customnpcs


CustomNPCS 1.7-pre3

# New Features:
  • Localization/translation system
  • I am looking for translators! If you would like to help translate the plugin, you may do so at https://crowdin.com/project/customnpcs. In exchange for your translation efforts, you will gain access to my preview builds if you join my discord.
  • The RunCommand Action can now run commands as the console. Only players with the customnpcs.run_command.enable_console can set a command to run as the console. **PLEASE BE CAREFUL WITH THIS**
  • 1.21.1 support
  • A complete action system rewrite
  • Custom actions can be registered via the API
  • The DisplayTitle action can now have a subtitle!

# Bug Fixes
  • Fixed NPCs not being injected after respawn
  • Fixed NPCs being injected in the wrong dimensions
  • Fixed NPC nametags from being visible (The numbers and letters)**


# Breaking API Changes
The Conditional, NumericConditional, and LogicalConditional have all been renamed to Condition, NumericCondition, and LogicalCondition respectively. Additionally, the NPC#setActions(List<Action>) has been changed to the new action class. If you would like to use legacy actions (Don't :pray:) use NPC#setLegacyActions(List<LegacyAction>)
CustomNPCs Icon
Download CustomNPCs
Select game version
Select platform