🧠 Easy NPC: Core
The Easy NPC: Core includes the foundational logic for the Easy NPC mod.
It provides the essential backend systems used by other Easy NPC modules.
🔧 What It Does
- 📦 Includes the core Easy NPC functionality.
- ⚙️ Provides shared backend logic and infrastructure.
- 🧩 Required by modules like:
easy_npc-config-uieasy_npc-bundle
👨💻 Who Should Use This?
This module is best suited for:
- 🖥️ Server owners
- 🧪 Mod developers
- 🧪 Modpack developers
- 🔧 Advanced users or multiplayer environments
Use this version if you don’t need a built-in configuration UI or want tighter control over how Easy NPC is integrated.
🙅 Not for Regular Players
⚠️ Most players should use the bundled version, which includes a user-friendly config UI.
👉 Available at: modrinth.com/mod/easy-npc
✅ Can Be Used Standalone
While it can be used on its own, it's primarily designed as a modular backend for more complex setups.
Introduction & Overview Video (English)
All Versions
+ Add Version| Name | Game version | Platforms | Published | Downloads | Actions |
|---|---|---|---|---|---|
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 | ||||
| 18h ago | 1 |
## Note
This change log includes the summarized changes. For the full changelog, please go to
the [GitHub History][history] instead.
Note: Please always back up your world / NPCs before updating to a new version!
Check the [upgrade guide][upgrade_guide] for more information.
### 7.15.0
- Fixed #838 by keeping preset imports silent when run through
/executeor command blocks. - Fixed #380 by applying the NPC limit to the default spawner as well.
- Fixed #849 by allowing resource pack sounds in the sound configuration.
- Fixed #349 by no longer spawning NPCs left-handed at random.
- Fixed #851 by locking dialog buttons per dialog, not across dialogs with the same label.
- Fixed deleted or duplicated NPCs returning, memory leaks and several owner and UI issues.
- Fixed the Epic Fight Wither Skeleton NPC missing its Epic Fight mob patch.
- Fixed off-center inventory screens and their close button overlapping the "Custom" trading tab.
- Fixed scaled Doppler NPCs keeping the full hitbox of the mimicked entity.
- Fixed NPCs on a player's shoulder ignoring their scale and the Doppler's mimicked model.
- Changed requirements: same mod version on client and server, Easy Model Entities 2.5.0+.
- Changed backups of all worlds and killed NPC data to expire after 30 days, see
storage.cfg. - Added "Jump", "Assist Owner" and "Follow Nearest Player" to fix #845, fix #310, fix #761.
- Added an NPC inventory with item pickup and death drops to fix #111, fix #197, fix #543, fix #670.
- Added "Sit on Shoulder", a boss bar and
/easy_npc debug core loglevelto fix #577, fix #219. - Added the "Hold" animation mode, a "Bank Teller" preset and new API methods for addons.
### 7.14.0
- Fixed #846 by keeping custom poses for players who start seeing the NPC later.
- Fixed attribute and trading settings missing for players who start seeing the NPC later.
- Fixed changed max uses, XP and trading type not shown in the trading screens until reload.
- Fixed
/easy_npc sound setchanges not reaching players until the NPC was reloaded. - Added game tests that check NPC poses and settings after respawns and for new players.
### 7.13.0
- Fixed color and formatting tags in dialog button names showing as plain text.
- Fixed the button preview in the editor showing lowercase names as a raw translation key.
- Fixed the "Move EasyNPC" item not working for NPC owners outside of creative mode.
- Fixed
/easy_npc owner setreporting success even when the owner could not be changed. - Fixed the game crashing when the URL or player skin screen showed a skin download error.
- Fixed the preset browser search showing no results after scrolling down the list.
- Changed the network protocol version, so client and server must run the same mod version.
- Added
@initiator,@npcand@score()support to dialog button names to fix #841. - Added automatic client tests with the Client Runtime Interface Toolkit.
- Larger core refactoring and code cleanup.
### 7.12.2
- Fixed the Fairy hitbox being far too small, so its name tag and speech bubble sat in its body.
- Fixed scaled NPCs keeping their old hitbox and eye level, so hits, clicks and looking missed.
- Fixed oversized names, lists and NPC data in network packets being read without any limit.
- Fixed invalid NPC positions, scales, attributes, names and durations from being applied.
- Changed Fairy NPCs to take up the space of their model, so they collide and can be clicked.
- Changed Skeleton, Stray and Bogged NPCs to the vanilla hitbox height, they were slightly short.
- Changed the network protocol version, so client and server must run the same mod version.
### 7.12.1
- Fixed #836 by always showing "Restore", including datapack presets, with a reason tooltip.
- Fixed preset import and export messages missing, wrong or not warning about replaced NPCs.
- Fixed the preset browser reloading on each keystroke, leaking NPCs and clearing the selection.
- Fixed selection box drop-down lists being covered by the checkboxes and labels behind them.
- Fixed the preset list sorting, filter order and layout clipping options in small windows.
- Fixed
/easy_npc preset import datawithout a position importing it as a default preset. - Fixed spawn rate limit leaks, unstable preset IDs and "Spawn New" stacking NPCs on one spot.
- Changed "Restore" to refuse instead of spawning a copy when it is not permitted.
- Added sorting, a match count, reload, auto-close, the NPC ID and tooltips for presets and skins.
- Added
matching <pattern>batch imports with limits, a confirmation and a clickable position.
### 7.12.0
- Fixed #833 by showing Easy NPC Wand outlines only to the wand holder, owner and admins.
- Fixed #834 by adding "Set Home Here" and "Reset Home" buttons to the position configuration.
- Fixed #835 by keeping the NPC ID and position in exported presets, so imports restore the same
- Fixed preset imports and spawn eggs losing the owner's list entry and owner objectives.
- Fixed NPCs restored from an automatic backup losing their owner and becoming ownerless.
- Fixed selection lists showing only their first six entries and hiding the rest.
- Changed importing a preset to update the original NPC at its stored position instead of adding a
- Changed completed trades to play the "Trade completed" sound, which stayed silent before.
- Changed the API dialog call to report an unknown dialog label instead of always reporting success.
- Changed NPCs without arms to carry held items at the head or body instead of hiding them.
- Changed the optional Easy Model Entities dependency to require version 2.4.0 or newer.
- Added a "Sound" configuration with sounds for dialogs, speech, swimming, eating and fall damage.
- Added a searchable sound selection with volume and pitch sliders to the "Sound" configuration.
- Added a "Block Vehicles" option to keep NPCs out of boats, minecarts and modded chairs.
- Added the profession selection to all skin configurations and a new built-in skin per NPC type.
- Added client settings to hide name tags behind walls and
highlightEnabledfor wand outlines. - Added an "Exists" condition operation and API access to NPC movement, actions and presets.
### 7.11.0
- Fixed #828 by no longer freezing the server on logout when NPCs follow or watch the player.
- Fixed #831 by moving routine NPC removal messages to the debug log.
- Fixed #832 by making humanoid NPCs ignore custom player models, animations and poses.
- Fixed hourly NPC backups stuttering on large worlds and retaining timestamps of removed NPCs.
- Fixed hourly NPC backups losing the identity, owner and position of the backed-up NPC.
- Fixed owner-login restoration duplicating, repeatedly restoring, reviving or moving unloaded NPCs.
- Fixed NPC index and file synchronization issues causing lost NPCs, crashes or false warnings.
- Fixed stale NPC data after unloading, avoided redundant writes and added repeated-unload warnings.
- Fixed the preset browser failing to list custom and world presets saved in the SNBT format.
- Fixed speech bubbles losing their text and turning translucent with Iris shaders.
- Fixed the "Opacity" of an NPC being ignored while a shader pack is active.
- Fixed text formatting and macro parsing for translated speech bubbles and mod API texts.
- Fixed speech bubbles and their text staying hidden behind blocks while a shader pack is active.
- Added
minLightLevelto keep speech bubbles readable in dark surroundings.
### 7.10.0
- Fixed #829 by allowing bats and other non-walking mobs as the render entity of a Doppler NPC.
- Fixed the Wandering Trader NPC rendering without its texture.
- Fixed NPCs rendered as a bat, frog or warden showing a static pose instead of their animation.
- Fixed the NPC name tag showing above the previews in the "Custom Models" configuration.
- Fixed speech bubbles being cut off by walls, doorframes and the NPC's own body.
- Fixed the previews in the "Custom Models" configuration.
- Changed the previews in the "Custom Models" configuration to stand on a common ground line.
- Changed overlapping speech bubbles to move apart and to stay visible when the NPC is off-screen.
- Changed "Navigation: Automatic" to use flying movement for NPCs rendered as a flying mob.
- Changed the render entity list to hide seats, paintings, thrown items and other non-mob entities.
- Added a "Min. hover height" slider for flying NPCs and client settings for speech bubbles.
### 7.9.0
- Fixed modded fish NPCs, like the ones of Tide 2, spinning around instead of swimming upright.
- Fixed "Navigation: Automatic" using ground movement for water NPCs and aquatic model NPCs.
- Fixed the "Random Swimming" objective never moving an NPC that uses aquatic navigation.
- Fixed a swimming NPC shaking or twitching in place instead of holding its tilt and swim depth.
- Fixed a swimming NPC turning in circles forever when it could not reach its next path point.
- Fixed an NPC that fell into water never getting out of it again.
- Fixed a following NPC searching a new path every tick while its target was unreachable.
- Fixed the "Move to" actions stopping short of a raised target or not starting while in the air.
- Fixed "Move back to Home" ignoring height differences and never returning from beyond 32 blocks.
- Fixed the "Opacity" input field being too narrow to show a value of 100.
- Fixed a damaged NPC with an Easy Model Entities model never flashing red.
- Changed modded water NPCs to swim level, vanilla water mobs keep their tilt as before.
- Changed the "Move to" actions to walk up to 48 blocks and to teleport only beyond that range.
- Changed "Move to" and "Move back to Home" to give up after three seconds without progress.
- Changed the timeout of a "Move to" action to count real ticks, it ran twice as long before.
- Changed a new "Random Swimming" objective to rank below following, fleeing and attack goals.
- Changed "Opacity" of an NPC with an Easy Model Entities model to be applied by that mod itself.
- Changed the minimum Easy Model Entities version to 2.3.0, older versions disable the integration.
- Added "Depth below surface" and "Height above floor" sliders for the swim level of an NPC.
- Added log entries for the NPC files written on a world save, with a warning above 250 ms each.
### 7.8.1
- Fixed #827 by rendering fish NPCs in water upright instead of always flopping on their side.
- Fixed #828 by keeping a damaged NPC from blocking the world save, it now falls back to defaults.
- Fixed a restored NPC picking up a random preset ID that changed with every save.
- Changed NPC data to only be written to disk when it actually changed.
### 7.8.0
- Fixed smaller text and UI issues.
- Changed an NPC that is already standing at its target position to finish the movement right away.
- Changed the "None" skin tab to "Advanced", which now holds "Disable Skin" and the texture field.
- Changed the minimum Easy Model Entities version to 2.2.0, older versions are no longer accepted.
- Added a "Move to" action, which sends an NPC to a position, a player, its owner or its home.
- Added a "Move to and Wait" action, which runs the following actions only after the arrival.
- Added an arrival radius, a timeout and an optional teleport to both move actions.
- Added an "Opacity" attribute from 0 to 100, which fades body, armor and hand items together.
- Added a "Set Opacity" action, which turns an NPC into a ghost or hides it completely.
- Added the "Lantern Wraith" preset, a ghost walking a square with a short line at every corner.
- Added API access to the move actions and the opacity of an NPC.
- Added a "Resource Location" skin type, which renders any texture of a mod or a resource pack.
- Added an "Advanced" skin tab, which previews the NPC with the entered texture before applying it.
### 7.7.7
- Fixed #821 by keeping the transparency of 64x64 skins, which Fresh Moves needs for its eyes. Skins
- Fixed #818 by running trade actions for Villager and Wandering Trader NPCs as well.
- Fixed a dialog with several text variants switching its speech bubble size every second.
- Fixed the skin cache storing the processed image instead of the original download.
- Fixed the untranslated interval names, like
PER_DAY, of the "Execution Limit" condition. - Fixed the
sitanimation of Easy Model NPCs, which never used the built-in sitting pose. - Fixed the speech bubble being cut off by the head of an NPC when a player stood close to it.
- Changed speech bubbles to keep their screen size and to move down or aside when a player is close.
- Changed the speech bubble text to render 20% larger than a name tag.
- Changed a time based action set with a "Wait" action to run in order instead of picking one entry.
- Changed dialog texts to wrap later, so an existing dialog can switch to the wider screen layout.
- Changed fallback actions to skip screen actions without a player, like the regular actions do.
- Changed the minimum Easy Model Entities version to 2.1.0, older versions disable the integration.
- Added a "Wait" action, which pauses the following actions of an event for a chosen duration.
- Added the "Countdown Timekeeper" preset, a speech bubble count to ten ending in sound and sparks.
- Added scaling and rotation for Doppler NPCs behind the "Experimental Features" checkbox. Both only
- Added a "Sound" action, which plays a sound at the NPC with sound category, volume and pitch.
- Added "Every 5 Minutes" and "Every 15 Minutes" to the "Execution Limit" condition.
- Added a "Player Idle" condition, which checks how long a player has not moved.
- Added an "Immovable" attribute, which keeps an NPC in place against pushing and knockback.
- Added
/easy_npc pauseto pause a single NPC or all NPCs; the global pause ends with the server. - Added API access to the sound action, the pause state and the idle time of a player.
- Added a texture override per model slot for Easy Model NPCs over
/easy_npc render texture. - Added a "Repeat" playback mode with a count and a time limit to the "Play Animation" action.
- Added API access to animation variants, texture slots and textures of Easy Model NPCs.
### 7.6.0
- Fixed unclear mod conflict errors for duplicate entity data tracker IDs.
- Fixed third-party health bars rendering over NPC previews in configuration and dialog screens.
- Fixed Doppler and Easy Model Entities NPCs using default hitboxes instead of their model size.
- Fixed the
/easy_npccommands suggesting no NPC UUIDs at all on a server. - Fixed the pose list of the "Set Pose" action drawing over its input field.
- Fixed the untranslated "Loop", "After current" and "Action Data Type" labels of the action editor.
- Fixed the missing hint text of the "Chance" condition.
- Fixed long condition hints running out of the editor screen instead of wrapping.
- Fixed the misaligned help icons and text buttons of the "Message" action.
- Fixed changes to the "Set Pose", "Play Animation" and "Stop Animation" actions not being saveable.
- Fixed the speech bubble text sitting closer to its upper border than to its lower one.
- Changed the NPC suggestions to list the crosshair NPC first and only own NPCs without permissions.
- Changed a preset export to only store what differs from a new NPC, without position or owner.
- Changed a preset without objectives or actions to fall back to the defaults of its NPC type.
- Changed events without a player, like "On Spawn" or "On Kill", to check their conditions. An
- Changed a time based action to pick the owner as
@initiatorwhenever the owner is nearby. - Changed speech bubbles to stay visible from 5 up to 18 seconds, depending on the text length.
- Changed the "Set Pose" action to only show its input field for the "custom" pose entry.
- Added time based actions on five fixed steps, from every ~1 second up to every ~15 minutes.
- Added a "Message" action for chat, system message and speech bubble text without a command.
- Added text variants, a sender name, a recipient and translation keys to the "Message" action.
- Added the speech bubble graphic as
easy_npc:textures/gui/speech_bubble.pngfor resource packs. - Added a "Chance" condition in percent and a "Relationship" condition for owner and faction.
- Added spawn, owner login, state change, day / night, weather and the missing "On Trade" events.
- Added a base preset per NPC type under
easy_npc:api/preset/base/, usable as a parent preset. - Added the "Wandering Companion" preset, a talkative NPC built from time based messages.
- Added an action registry, an action handler, a preset validator and richer event data for mods.
- Added a tooltip with name, type and distance to every NPC suggestion of the
/easy_npccommands. - Improved the NPC suggestions, which appear without typing and tolerate a near miss of one block.
### 7.5.0
- Fixed #814 by giving every Cobblemon NPC its own animation state instead of one per species.
- Fixed #813 by letting "Move back to Home" work at any distance instead of only near its home.
- Fixed #812 by checking once per session whether a player changed their skin.
- Fixed #810 by accepting Cobblemon aspects of resource packs instead of only "shiny" and "female".
- Fixed the home position of an NPC always reading as unset, which hid "Home" in the configuration
- Fixed NPCs spawned from a preset, the preset browser or a respawn never getting a home position.
- Fixed an NPC spawned from the preset browser keeping the home position of the world the preset was
- Fixed NPCs being drawn as a white silhouette with a shadow in the configuration, skin and preset
- Fixed the server crashing when an NPC with a "Tempt" objective ticked its goals.
- Fixed a single or boss spawner spawning without any limit when its preset carried no stored NPC.
- Fixed the "Legacy Easy NPC Data" warning appearing for newly created NPCs.
- Fixed missing transparency corrections for old 64x32 skins, which showed layer artifacts.
- Fixed the player skin screen freezing for a moment while a player name was looked up.
- Fixed the "Reset look at ..." objective label, which read "Reset loot at ..." in some languages.
- Fixed the "No Gravity" attribute being ignored after a preset import, which let NPCs fall.
- Fixed the Fabric game tests, which crashed on start because of the development helper mods.
- Fixed NPCs losing their owner when they were spawned again after a despawn.
- Fixed objectives being deleted from an NPC when the mod providing them was missing at start.
- Fixed importing a preset without a stored id, which spawned an NPC without owner and home.
- Fixed "Follow owner" and "Look at owner" keeping their old target after the owner was changed.
- Fixed attack targets staying assigned to an NPC after the targeted entity was gone.
- Fixed the "Look at Item" objective, which could be stored but never did anything.
- Fixed walking animation for Doppler NPC and 3rd party models.
- Fixed Forge never running its server start-up step, which left NPC tracking, factions and the
- Fixed Forge development runs starting without any mixins, which disabled the vanilla entity
- Changed the movement objectives to a fixed order: flee, follow, return home, then stroll. NPCs
- Changed inserting a preset into a vanilla monster spawner to keep its delay, count and range.
- Changed "Follow owner" and "Look at owner" without a chosen target to follow the owner of the NPC.
- Changed datapack presets to
easy_npc/preset/, the old folder still works, but only for easy_npc. - Changed the preset browser to always list its entries in the same order.
- Removed the experimental user-defined NPCs; the extra config file is no longer read or created.
- Removed the unused
SERVER_SKINskin type. - Added a new game test structure to support game tests in 1.21.11 and higher.
- Added a reload button to each entry of the player skin screen, to fetch a single skin again.
- Added the reason to the log whenever an NPC is removed, so an unexpected despawn can be traced.
- Added suggestions to
/easy_npc render set species. - Added support for presets from other mods, which no longer have to use the
easy_npcnamespace. - Added a preset visibility that hides a preset from the preset browser and the NPC screens.
- Added a teleport distance and a resting spot offset to the follow objectives.
- Added item tags, a "can be scared" option and a "only without owner" option to "Follow item".
- Added an item field to the look objectives, so an NPC can watch a chosen dropped item.
- Added an identifier per NPC, so a mod can find its own NPCs again.
- Added an option to spawn an NPC again when its owner logs in.
- Added game tests for NeoForge, which had none, and restored the spawn egg, dialog screen, data
- Added game tests for every configuration and editor screen, covering all three mod loaders.
- Added game tests for the home position, covering the spawn default, the stored value and
- Improved the model name parsing, which mistook a species ending in "_shiny" for a variant.
- Improved following of flying NPCs, which now steer directly when there is no path through the air.
- Improved third party support with an API for presets, own objectives and objective configuration.
### 7.4.0
- Fixed #807 by no longer pulling every same-type NPC within 32 blocks into a "Defend Self" fight.
- Fixed #805 by evaluating all visibility settings together instead of stopping at the first one.
- Fixed #804 by keeping the custom name on Doppler NPCs for name based textures and the name tag.
- Fixed #803 by adjusting assets to match typical Minecraft style instead of generic UI style.
- Fixed the day and night detection, which counted sunrise as night and sunset as day.
- Fixed the visibility in the Nether and the End, which used the Overworld time.
- Fixed the time and game mode visibility checkboxes appearing in a random order.
- Fixed game tests only being able to fail on their first assertion, which hid later failures.
- Fixed the "Saddled" horse skin variants, which never showed a saddle.
- Changed "Visible to Owner" and "Visible to Team" to also follow day, night and game mode.
- Changed Evoker, Illusioner and Vindicator variants without "Crossed Arms" to keep their arms down.
- Added a "Defend Faction" objective that attacks whoever hurt a nearby faction member or player.
- Added a system message when faction members fight each other and the faction stays out of it.
- Added a head equipment slot for Illagers so their captain banner can be removed or swapped.
- Added a day and night preview to the display configuration screen.
- Added unit and game tests for the visibility attributes and the faction defense.
- Improved the visibility check performance by reading the display attributes only once per check.
- Improved display attributes from older versions by completing them with their defaults.
- Improved the attack objective screen by disabling "Protect Owner" and "Defend Faction" when unset.
### 7.3.0
- Improved skin variants by carrying their data as typed fields instead of parsing variant names.
- Centralized the Cobblemon mod id and default model on shared constants.
- Reduced duplicated enum code with a shared
EnumUtilshelper forget(String)lookups. - Optimized villager profession and type lookups to use direct registry keys instead of scans.
- Optimized enum name lookups by caching tag names, ids and keys once at construction.
- Added unit and game tests for skin variants, villager resolution and the enum helper.
### 7.1.2
- Fixed #801 by using combination for NPC, Dialog and Action UUIDs to avoid collisions for action
### 7.1.1
- Fixed #800 by lazy loading entity types.
- Fixed #799 by fixing edge cases and adding additional documentation and better log messages.
- Fixed #798 by considering console, commands and command blocks as trusted command sources.
- Fixed a critical single-player / LAN issue where client and server NPCs shared the same registry.
- Fixed a memory leak in the configuration menu handling and added timeout and disconnect cleanup.
- Fixed duplicate downloads when several NPCs request the same skin at the same time.
- Fixed skin lookups failing after a error so a slow server no longer freezes the game.
- Fixed the URL skin screen freezing the game while checking a remote image; the check now runs in
- Added a new World Spawner block that limits an NPC preset across the whole world (all dimensions),
- Hardened remote skin downloads with a strict size limit and safe redirect handling to prevent
blockPrivateAddresses setting.- Improved server performance by only sending entity and player load events to NPCs that actually
### 7.0.0
- Fixed #794 by using the expected type for NPC rendering.
- Fixed scaling screen preview by pinning the entity feet to the 0 line of the scale ruler, so NPCs
box updates.
- Fixed #791 by adding Wandering Trader NPC type.
- Fixed #788 by extending the AI safeguards to Epic Fight and raw NPC variants (Piglin, Villager,
- Fixed #787, #531, #237 and #184 by adding a faction system with
/easy_npc factioncommands,
- Fixed #787, #771 and #572 by adding a new
targetobjectives tab to attack hostile factions or
- Fixed #786 by adding gender and shiny model variants for Cobblemon NPCs, searchable via
female
shiny in the model selection.- Fixed faction combat between invulnerable NPCs by adding the new
Attackable by Factionscombat
- Fixed Cobblemon model selection previews for oversized species by scaling with Cobblemon's own
- Fixed faction management edge cases by validating faction names, sorting faction lists and
- Fixed custom skin reloads by loading and clearing texture caches per skin model instead of always
- Improved the
Attackable by Players/Monsters/Factionscombat attributes to work independently of
Invulnerable, each opening a targeted hole for its own attacker group.- Improved preset command and network handling by splitting the large handlers into smaller focused
- Added Easy Model Entities Support.
- Added faction manager and faction editor screens to create, color and delete factions and manage
FACTION_MANAGEMENT security feature.- Added new
Miscattributes tab as home for the NPC faction assignment. - Added reusable warning and help icon components for inline hints with tooltips.
- Added additional unit and game tests for factions, target objectives and Cobblemon model variants.
### 6.25.0
- Fixed #782, #636, #622 by preserving data components during validations.
- Fixed #780 by caching remote texture downloads and reducing duplicate registrations.
- Fixed #767 by clamping attribute sliders against extreme values from other mods.
- Fixed #754 by adding custom data item matching for NPCs with actions and conditions.
- Fixed texture manager running in the wrong thread may cause crashes and deadlocks in >= 1.21.x.
- Fixed empty UUID handling for action conditions.
- Fixed execution limit reset for actions.
- Added texture registration queue to avoid multiple simultaneous downloads in the same tick.
- Added NPC coin, key and red token as consumable items for NPCs with actions and conditions.
- Added
Welcome Coin Traderas example NPC preset with custom coin, key and red token item data. - Added attribute safeguards against extreme values from other mods.
- Increased fallback max health value from 1024 to 4096 for high-health NPCs.
- Improved texture manager by reducing duplicate texture checks and registrations.
### 6.24.0
- Fixed #459, #775 by adding an option to block interactions with invisible NPCs.
- Fixed #774 startup crash related to optional Epic Fight and Cobblemon entity type maps.
- Fixed #773 by checking timed trade resets during base ticks and before opening trade screens.
- Fixed trade reset timing by increasing internal tickers correctly.
- Added time of day and weather conditions for #459.
- Added additional unit and game tests for trade resets, ticker handling and entity attributes.
- Added
Skywatch Scoutas example NPC preset with time of day and weather conditions.
### 6.23.0
- Fixed #774 by migrating isSunBurnTick error to 26.x.
- Fixed #772 by adjusting texture retries with 403 and 404 errors and lowering logging.
- Fixed #770 item rendering for Epic Fight NPCs (Evoker, Pillager, Vindicator and humanoid skins).
- Fixed #769 door loops with NPCs not reliably opening or closing doors.
- Fixed #760 by adding a dialog option and config setting (buttonConditionMode: LOCK or HIDE) to
- Fixed #709 by adding color picker popup for names with 32 colors and/or a manual RGB/hex value.
- Fixed NPC name color being reset when renaming without a specified color by preserving the
- Improved the door movement attributes so "Pass Door" is automatically enabled while "Open Door"
### 6.22.0
- Fixed #766 by passing the full server player context to command execution for better compatibility
- Fixed #764 by adding entity health, npc health conditions and NPC preset
Grukk, the Sparring Post as example for using these conditions.- Fixed #763 by making sure dialog button execution limits are now recorded.
- Fixed #758 by providing a example NPC preset named
One Wish Companion. - Fixed crashes related to 3rd party villager AI reading non-registered brain memories on Easy NPC
- Fixed Dialog buttons are not locked for server-side data as preparation for #760 and #644.
- Fixed #628 by adding conditional dialog opening support / command for better control over when
- Added brain AI for Piglin and Piglin Brute NPCs and registered the full vanilla brain memory set.
- Added additional guns to the gun tag for #757.
- Added a new "Open Dialog (Conditional)" action that opens a named dialog only if its conditions
- Added new entity health and npc health conditions for actions, dialogs and dialogs buttons.
- Added Piglin, Piglin Brute and Zombified Piglin NPCs invulnerable, for consistency with other
- Added a new "Knockback Immunity" combat attribute that prevents the NPC from being knocked back by
- Added a new "Explosion Immunity" combat attribute that makes the NPC immune to explosion damage
- Moved the "Projectile Collision" attribute to the Combat attribute screen, where it fits better
### 6.21.0
- Fixed item attachment for Illagers in crossed-arms pose.
- Fixed broken illager crossbow attack goal.
- Fixed crashes related to 3rd party items which are not renderable as hand items #756.
- Fixed crashes related to 3rd party mixins trying to access non-existing model parts #756.
- Fixed log.info spam message by reducing log verbosity and adding additional checks for custom
- Improved EasyNPCModelManager performance.
- Refactored NPC renderers to remove default hand item layer.
### 6.20.0
- Fixed crashes related to 3rd mods trying to access non-existing NPCs goals.
### 6.19.0
Note: This update adjusted the dialog background images by 10x6 pixels, which may require users to
adjust their custom dialog backgrounds if they are using custom ones.
- Fixed #752, #130 by adding dialog button condition support to allow to disable buttons.
- Fixed #683, #215 by adding typewriter effect support for dialog text.
- Fixed #690, #309 by allowing conditions for dialog, dialog buttons and interactions.
- Fixed smaller UI issues with dialog screen layout and background.
- Refactored dialog background images by 10x6 pixels on each side.
- Refactored dialog screen layout to better fit the new background size and improve appearance.
- Added typewriter effect and client configuration for dialog text.
- Added condition symbols to indicate the condition status for dialog, buttons and interactions.
- Added amount field for item conditions to allow checking for specific amounts of items.
- Added
Threshold Wardenas example NPC preset with various conditions and actions. - Added smaller bug fixes and optimizations related to dialog conditions and button states.
### 6.18.0
Note: This update changes the internal data format for conditions and actions, which may reset /
remove legacy existing execution-limit entries without stored IDs.
- Fixed #745 by adding conditions for actions to allow more complex and dynamic behavior.
- Fixed #652 by adding dialog button tooltip for longer texts.
- Fixed #687 by adding command value tooltip to show the full value.
- Added Experience Level conditions.
- Added Game-mode conditions.
- Added has item in inventory condition.
- Added has item in hand condition with (main hand and off-hand) support.
- Added player health condition.
- Added player tag condition.
- Added player team condition.
- Added Goldmere example NPC preset with various conditions and actions.
- Added negative condition support to allow negating conditions for more complex logic.
- Removed parameter pseudo IDs for
ActionDataEntryand replaced them with random UUIDs. - Refactored condition system to allow more condition types.
### 6.17.0
- Fixed #738 by adding additional tooltips for "Execute as player"
- Fixed to detailed logs by reducing log.info messages during startup and in-game.
- Added additional unit and game-tests.
### 6.16.0
- Fixed #732 by providing option to disable ESC key and close button for dialogs.
- Fixed #723 by avoid auto-close in specific cases like trading screens.
- Added general dialog configuration options to allow users to customize dialog behavior.
- Added avatar scaling and position offset options for dialogs.
- Added missing translation keys.
### 6.15.1
- Fixed #735 by extending the correct base class.
- Fixed several 26.1.2 specific issues from manual spawn testing.
### 6.15.0 (Trades, Player Heads, Epic Fight and QOL updates)
- Fixed #731 by resyncing species data, if species list is empty on the client.
- Fixed #730 by improving Epic Fight integration and enabled experimental features.
- Fixed #729 by making sure trade uses are stored correctly.
- Fixed #728 by adding custom head support for player heads.
- Fixed #689 by showing remaining trade uses and allow resetting manually and automatically.
- Fixed #218 and #132 with new trade configuration screen and better support for custom trades.
- Fixed trade specific edge by switching between basic and normal/advanced trading mode.
- Fixed dialog button text is truncated with tooltip showing the full text.
- Fixed Cobblemon animation issues by syncing animation state with Cobblemon Animation System.
- Added per trade specific actions to allow users triggering actions after buys.
- Added trade reset button to reset all trades easily.
- Added trade usage information to trade configuration screen.
- Added experimental feature state to allow users to manually enable experimental features.
- Added Griselda Grindstone as example trader with actions.
- Cleanup test files.
### 6.14.0
- Fixed #727 by making sure changes are synced to the client when changing values.
- Fixed #726 by adding additional allow lists for specific commands.
- Fixed #686, #389, #304, #211 by adding basic Cobblemon support with Cobblemon NPC.
- Fixed dialog misalignment and navigation issues by adjusting dialog sprites and screens.
- Fixed x and z root rotation by correcting rotation logic and pivot calculations.
- Added basic Cobblemon support with custom NPC type and model for testing.
### 6.13.0 (Security and Permissions Updates)
Notes: This update includes better security checks and permissions for multiplayer environments. It
allows to execute server commands which can be potentially dangerous if used with malicious intent.
- The update splits the model root data and logic from the rest of the model part data and logic,
- Fixed #725 by separating model root data and logic from the rest of the model part data and logic.
- Fixed #722 by supporting .sbnt files as local presets.
- Fixed #675 by adding dedicated assets for dialog and config screen backgrounds.
- Fixed #605, #532, #529 with new security checks and permissions system.
- Fixed #469, #311 by adding experimental api documentation and examples for custom model support.
- Fixed double rendering of config screen background by removing redundant background rendering.
- Fixed Ghast and Slime hitbox and name tag position issues by adjusting bounding box.
- ⚠️ Added security checks to prevent potential exploits and allow safe usage in multiplayer
- Replaced dynamic dialog screen background with a static one for better performance, customization
- Replaced dynamic config screen background with a static one for better performance.
- Refactored config-ui specific components and removed them from the core mod.
- Removed duplicated sprite sheets.
- Prepare permission system for possible Luck Perms integration in the future like #712.
- General code cleanup and optimizations related to config screen rendering and assets.
### 6.12.0
- Fixed #714 by adding additional checks for custom model part list based on vanilla models.
- Fixed #713 by reducing log verbosity with downgraded per-NPC INFO messages to DEBUG and
- Fixed #711 by reduced oversized startup/config log output.
- Fixed NBT validation guard to prevent unnecessary buffer allocations in production.
- Added model part name constants to EasyNPCModelManager for consistent usage across mixins.
- Improved RenderEntityTypeSupportConfig by enhancing filter logic and optimizing data structures
- Removed verbose debug logs that dump large data structures.
### 6.11.1
- Fixed #710 by improving backward-compatible parsing for recoverable trade data.
### 6.11.0
- Fixed #703 rendering issue with new custom layer system and hand renderings.
- Fixed #701 by adding additional safeguards and logging for invalid trading offers.
- Fixed smart animation not working properly with modified head position.
- Fixed head tracking by moving player detection back to server side-only.
- Fixed CustomLookAtPlayerGoal to better handle edge cases and reduce jitter.
- Fixed issue with Doppler NPCs keeping their hand inventory.
- Improved PoseManager logging message.
- Updated logo with a new design.
### 6.10.0
- Fixed #698 by adding try and catch for 3rd party entity creation.
- Fixed #695 by clearing model part rotations/positions when switching to a
DEFAULTvanilla pose. - Fixed #695 by applying lock rotation and pose animation only when the NPC is idle.
- Fixed #695 by correcting root rotation pivot to use actual bounding box height instead of 0.5f.
- Fixed multiple objective registration issues including inverted
isTargetedPlayercheck, wrong
targets.
- Fixed goal reference being retained after objective is unregistered.
- Removed auto-lock of ROOT rotation when loading poses; root lock is now user-controlled.
- Added lock rotation checkbox to the advanced and custom pose configuration screens.
- Added model-specific pose key filtering in
ConfigurationMenuHandlerfor the default pose screen. - Added unit tests for
CustomPosition,CustomRotation,CustomScale,ModelPose,
ModelAnimationBehavior and ModelAnimationData.- Added
NPCDataIsolationTestHelperand game tests for Fabric and Forge. - Increased max head yaw range from 60° to 65°.
### 6.9.0
- Fixed #692, #666 by adding caching and safeguards to prevent redundant retriggering of NPC entity
- Fixed #651, #617 by adding basic custom poses for all supported NPC types.
- Fixed #597 by adding additional Flee goals for fleeing from players, villagers, monsters, ...
- Fixed pose loading to read directly from mod resources instead of copying files to disk.
- Fixed duplicate
saveNPCcalls on entity join by checking existing registry entry first. - Added
despawnandspawncommands to remove and re-spawn NPCs by UUID with configurable removal
- Added
ModelPoseAPIandEasyNPCEntityHandlerpublic API classes for controlling NPC poses and
- Added pose data files for all supported NPC types.
- Added lock rotation checkbox to the basic pose configuration screen.
- Added
MoveToPositionGoalto move an NPC to a position before executing a callback action. - Added
EasyNPCLookControlandEasyNPCBodyRotationControlto respect locked root rotation. - Added synced owner change and dimension change to the NPC entity data index.
- Added EasyNPCItemAttachmentLayer into various entity renderers.
- Added dedicated
Flee Objectiveconfiguration tab with objectives for fleeing creepers, monsters,
- Added
FOLLOW_ITEMobjective to the follow objectives tab to make NPCs follow item entities by
minecraft:apple).- Added
LookAtEntityByUUIDGoaland enabled the look-at-entity-by-UUID and look-at-owner objectives
- Added
persistentflag toSynchedDataIndexso that transient indices (e.g. crossbow charge,
- Added configurable
customParticlesEnabledflag toSlimeBasefor API consumers. - Added
SoundType.PETand mappedCAT_PURRto the cat NPC for tamed ambient sound variety. - Reduced log verbosity for periodic NPC save operations from INFO to DEBUG.
### 6.8.3
- Fixed #680 by enforcing version miss-match by upgrading network protocol version.
- Fixed #679 by resetting position, rotation and size for name tag.
- Fixed #665 by adding multi state slide for root rotations.
- Fixed #664 by adding option to disable following mouse cursor for easier posing.
- Fixed #663 by improve support for X and Z root rotations.
- Fixed #661 by adding quick rotation with NPC wand and sneaking to the NPC to rotate the root to
- Fixed move tool is wrongly triggering interactions by adding check for move tool in interaction
- Fixed Preset Item is wrongly triggering interactions by adding check for preset item in
- Fixed Slime and Ghast hitbox and name tag position issues by adjusting bounding box and eye height
- Fixed Slime and Ghast GUI position by adjusting offset values.
### 6.8.2
- Fixed #677 by extending
SafeMerchantDatawith notifyTrade to avoid crashes. - Added progression data support for leveling up NPCs based on player interactions and actions.
- Added global NPC tracking system for better management and debugging of NPCs across the world.
- Added
OriginalModelConfig.withVariantTexture()option to allow using variant textures with the
### 6.8.1
- Fixed #676 by using existing preset helper method instead of custom one.
### 6.8.0 (Adding API support)
- Fixed #667 by adding warning messages and additional checks for invalid network packets.
- Fixed Horse spawn eggs model.
- Fixed pose support for allay, chicken, creeper, fox, ghast, horse, illager, iron golem, slime and
- Added NPC base classes for better API support.
- Added NPC raw classes for advanced API support.
- Added Slim and Ghast NPC types.
- Added Custom Model API for easier integration with other mods and custom models.
- Refactored internal data handling and registration for better maintainability and future
### 6.7.1
- Fixed #657 and #656 by adding additional client side checks for vanilla bug.
### 6.7.0
- Fixed #650 by implementing Wolf Leg Animations in setupAnim method.
- Fixed #648 by fixing canBeHitByProjectiles translation.
- Fixed #645 by adding
allowBypassInvulnerabilityconfig option to allow/deny bypassing
- Fixed delete button showing label even with small width.
- Fixed up and down buttons not positioned correctly in some cases.
- Fixed name tag showing up for dialog and configuration UI.
- Fixed distance action issue were multiple actions are not properly triggered.
- Fixed issues with NPC presets.
- Fixed Cat NPC and Wolf NPC owner data not syncing properly.
- Added preset browser for easier selection of common NPC presets.
- Added preset .snbt (text) export and import functionality for sharing NPC presets.
- Refactored existing NPC presets to use new .snbt format.
- Refactored spawner system to use new preset format for better maintainability and future
### 6.6.2
- Fixed #643 by rework scaling system.
- Fixed scaling not properly updating hitbox and nametag position after restart / reload.
- Added MID and MOUSE_OVER name tag visibility modes for finer control over NPC name display.
- Added team-based name tag visibility support respecting vanilla Team.
### 6.6.1
- Fixed #638 by refactored internal data handling for display attributes.
### 6.6.0
- Fixed #634 by implementing asynchronous texture loading with dedicated thread pool.
- Fixed texture loading blocking render thread causing game freezes.
- Fixed race conditions in texture reload protection using atomic operations.
- Fixed resource leaks in HTTP connections during remote texture downloads.
- Fixed URL validation spam allowing multiple simultaneous downloads of the same texture.
- Fixed exception handling for remote image validation preventing crashes on invalid URLs.
- Fixed
defineId called for:warning messages during NPC loading. - Refactored texture loading architecture with multi-level defense and rate limiting.
- Refactored entity data registration logic for better maintainability.
- Converted data classes to modern Java records for better immutability and thread-safety.
- Added thread-safe session server spam protection with ConcurrentHashMap.
- Added comprehensive error recovery with automatic cooldown reset on failures.
- Improved texture loading with 2-thread pool and 500ms rate limiting.
- Improved exception handling with specific catch blocks for IIOException and FileNotFoundException.
### 6.5.2
- Fixed Villager profession and job skin issue.
- Improved GitHub workflows by adding cache for gradle dependencies.
- Improved Gradle build time and cleanup tasks.
### 6.5.1
- Fixed #632 by implementing ON_KILL action type and event.
- Fixed #629 by improving texture handling performance, caching, and memory usage.
- Fixed kill command is not working on NPCs.
- Fixed texture reload protection preventing cache reload after eviction.
- Fixed WebP validation bug in remote image validator (missing return statement).
- Refactored texture handling logic for better maintainability and future improvements.
- Added time-based reload protection (60 seconds) to replace permanent blocking mechanism.
- Added missing variant textures for chicken, pig and wolf.
- Added additional unit tests for texture handling.
- Improved gradle build tasks.
### 6.5.0
- ⚠️ Removed jar-in-jar bundle approach for better mod compatibility and api capabilities.
- Fixed #627 scissor implementation for better compatibility with other mods.
- Fixed #625 lively animation issues when using rotated or moved model parts.
- Fixed default animation are canceled when using scaled model parts.
- Added better pose animation control with smart, default und none options.
### 6.4.1
- Fixed #626 screen switching logic for different NPC UUIDs, thanks to
Spawnbladefor the detailed
### 6.4.0
- Fixed #626 by improving dialog data validation and error handling.
- Fixed #623 by refactoring render data and render handling.
- Fixed #622 by making sure custom data are properly saved and loaded.
- Fixed open dialog action type to allow opening dialogs from other NPCs.
- Fixed hashing issues by adding missing equals and hashCode methods for ConditionDataSet and
- Added custom data test item for #622 and easier testing of custom data.
- Improved records and fixed potential issues with missing data.
### 6.3.0
- Refactored config ui specific components and removed them from the core mod.
- Fixed dialog data by filtering dialog data before sending to the client.
- Fixed dialog editor layout issues and improved usability.
- Fixed missing default values for some dialog data fields.
- Added dialog priority support to control the order of dialog execution.
- Added condition support for dialog and scoreboard actions.
- Added frequency support for dialog to limit how often an dialog can be shown.
- Added new NPC preset to for scoreboard and condition support.
- Improved dialog button data format by removing redundant fields.
### 6.2.0
- Fixed legacy custom name parsing.
- Fixed string injection within dialogs.
- Fixed missing translation for action types.
- Added scoreboard action type to increase, decrease, set scoreboard values.
- Added
@score(...)NPC macro to display scoreboard values in the dialog. - Added additional unit tests.
- Improved spin button with indicators and better usability.
### 6.1.2
- Fixed container and menu sync issues with missing close container packets.
- Fixed close button not working in some cases.
- Fixed jumping mouse cursor between screen transitions.
- Fixed translation files and removed duplicate and deprecated entries.
- Moved Easy NPC wand to existing core item tab instead of creating a new one.
- Added cat pose support for different model parts (except tail).
- Improved EasyNPCWand glowing effect performance by disabling it when not needed.
- Improved custom entity detection by excluding non-living entities like displays, makers, throwns
- Improved cat variant handling.
### 6.1.1
- Fixed #615 by checking if item is equipped in one of the hands.
- Fixed #612 by re-validating entity types.
- Fixed #610 by force sync of hat and head layers for specific models.
- Fixed orc textures.
- Fixed cat variant handling for 1.21.5.
- Fixed player render by adjusting render state
skinfield. - Fixed cat renderer by adjusting render state
texturefield. - Fixed position, scaling and rotation preview.
- Fixed Fairy model.
- Improved custom model support and performance, by moving related logic into to client side only.
- Improved caching of player to UUID mappings for player skins.
- Limited change model commands and logic to Doppler NPCs only.
- Added renderEntityRaw method to render NPC as-it-is.
### 6.1.0 ✨
This is a major release. Please back up your worlds and NPC data before updating. This version
contains many improvements, optimizations, and internal changes that are **not fully compatible**
with earlier releases.
⚠️ Breaking changes
- Existing NPCs and their configuration data from versions before 6.1.0 may not load correctly or
- Internal data formats and some behaviors have been refactored to support new use-cases.
🧩 New modular structure
Easy NPC is now split into three separate mods:
- Easy NPC** – Bundle that includes both Core and Configuration UI for a plug‑and‑play experience.
- Easy NPC: Core** – Lightweight runtime and logic for NPCs, with minimal dependencies. Intended
- Easy NPC: Configuration UI** – Standalone configuration interface for creating and editing NPCs.
🎯 Why this change?
- Allows servers and modpacks to ship only the **Core** mod on the server side for a leaner setup.
- Reduces memory usage and load times when the UI is not required everywhere.
- Makes development and testing faster by separating UI and core logic.
[history]: https://github.com/MarkusBordihn/BOs-Easy-NPC/commits/
[upgrade_guide]: https://github.com/MarkusBordihn/BOs-Easy-NPC/wiki/Upgrading
## Note
This change log includes the summarized changes. For the full changelog, please go to
the [GitHub History][history] instead.
Note: Please always back up your world / NPCs before updating to a new version!
Check the [upgrade guide][upgrade_guide] for more information.
### 7.15.0
- Fixed #838 by keeping preset imports silent when run through
/executeor command blocks. - Fixed #380 by applying the NPC limit to the default spawner as well.
- Fixed #849 by allowing resource pack sounds in the sound configuration.
- Fixed #349 by no longer spawning NPCs left-handed at random.
- Fixed #851 by locking dialog buttons per dialog, not across dialogs with the same label.
- Fixed deleted or duplicated NPCs returning, memory leaks and several owner and UI issues.
- Fixed the Epic Fight Wither Skeleton NPC missing its Epic Fight mob patch.
- Fixed off-center inventory screens and their close button overlapping the "Custom" trading tab.
- Fixed scaled Doppler NPCs keeping the full hitbox of the mimicked entity.
- Fixed NPCs on a player's shoulder ignoring their scale and the Doppler's mimicked model.
- Changed requirements: same mod version on client and server, Easy Model Entities 2.5.0+.
- Changed backups of all worlds and killed NPC data to expire after 30 days, see
storage.cfg. - Added "Jump", "Assist Owner" and "Follow Nearest Player" to fix #845, fix #310, fix #761.
- Added an NPC inventory with item pickup and death drops to fix #111, fix #197, fix #543, fix #670.
- Added "Sit on Shoulder", a boss bar and
/easy_npc debug core loglevelto fix #577, fix #219. - Added the "Hold" animation mode, a "Bank Teller" preset and new API methods for addons.
### 7.14.0
- Fixed #846 by keeping custom poses for players who start seeing the NPC later.
- Fixed attribute and trading settings missing for players who start seeing the NPC later.
- Fixed changed max uses, XP and trading type not shown in the trading screens until reload.
- Fixed
/easy_npc sound setchanges not reaching players until the NPC was reloaded. - Added game tests that check NPC poses and settings after respawns and for new players.
### 7.13.0
- Fixed color and formatting tags in dialog button names showing as plain text.
- Fixed the button preview in the editor showing lowercase names as a raw translation key.
- Fixed the "Move EasyNPC" item not working for NPC owners outside of creative mode.
- Fixed
/easy_npc owner setreporting success even when the owner could not be changed. - Fixed the game crashing when the URL or player skin screen showed a skin download error.
- Fixed the preset browser search showing no results after scrolling down the list.
- Changed the network protocol version, so client and server must run the same mod version.
- Added
@initiator,@npcand@score()support to dialog button names to fix #841. - Added automatic client tests with the Client Runtime Interface Toolkit.
- Larger core refactoring and code cleanup.
### 7.12.2
- Fixed the Fairy hitbox being far too small, so its name tag and speech bubble sat in its body.
- Fixed scaled NPCs keeping their old hitbox and eye level, so hits, clicks and looking missed.
- Fixed oversized names, lists and NPC data in network packets being read without any limit.
- Fixed invalid NPC positions, scales, attributes, names and durations from being applied.
- Changed Fairy NPCs to take up the space of their model, so they collide and can be clicked.
- Changed Skeleton, Stray and Bogged NPCs to the vanilla hitbox height, they were slightly short.
- Changed the network protocol version, so client and server must run the same mod version.
### 7.12.1
- Fixed #836 by always showing "Restore", including datapack presets, with a reason tooltip.
- Fixed preset import and export messages missing, wrong or not warning about replaced NPCs.
- Fixed the preset browser reloading on each keystroke, leaking NPCs and clearing the selection.
- Fixed selection box drop-down lists being covered by the checkboxes and labels behind them.
- Fixed the preset list sorting, filter order and layout clipping options in small windows.
- Fixed
/easy_npc preset import datawithout a position importing it as a default preset. - Fixed spawn rate limit leaks, unstable preset IDs and "Spawn New" stacking NPCs on one spot.
- Changed "Restore" to refuse instead of spawning a copy when it is not permitted.
- Added sorting, a match count, reload, auto-close, the NPC ID and tooltips for presets and skins.
- Added
matching <pattern>batch imports with limits, a confirmation and a clickable position.
### 7.12.0
- Fixed #833 by showing Easy NPC Wand outlines only to the wand holder, owner and admins.
- Fixed #834 by adding "Set Home Here" and "Reset Home" buttons to the position configuration.
- Fixed #835 by keeping the NPC ID and position in exported presets, so imports restore the same
- Fixed preset imports and spawn eggs losing the owner's list entry and owner objectives.
- Fixed NPCs restored from an automatic backup losing their owner and becoming ownerless.
- Fixed selection lists showing only their first six entries and hiding the rest.
- Changed importing a preset to update the original NPC at its stored position instead of adding a
- Changed completed trades to play the "Trade completed" sound, which stayed silent before.
- Changed the API dialog call to report an unknown dialog label instead of always reporting success.
- Changed NPCs without arms to carry held items at the head or body instead of hiding them.
- Changed the optional Easy Model Entities dependency to require version 2.4.0 or newer.
- Added a "Sound" configuration with sounds for dialogs, speech, swimming, eating and fall damage.
- Added a searchable sound selection with volume and pitch sliders to the "Sound" configuration.
- Added a "Block Vehicles" option to keep NPCs out of boats, minecarts and modded chairs.
- Added the profession selection to all skin configurations and a new built-in skin per NPC type.
- Added client settings to hide name tags behind walls and
highlightEnabledfor wand outlines. - Added an "Exists" condition operation and API access to NPC movement, actions and presets.
### 7.11.0
- Fixed #828 by no longer freezing the server on logout when NPCs follow or watch the player.
- Fixed #831 by moving routine NPC removal messages to the debug log.
- Fixed #832 by making humanoid NPCs ignore custom player models, animations and poses.
- Fixed hourly NPC backups stuttering on large worlds and retaining timestamps of removed NPCs.
- Fixed hourly NPC backups losing the identity, owner and position of the backed-up NPC.
- Fixed owner-login restoration duplicating, repeatedly restoring, reviving or moving unloaded NPCs.
- Fixed NPC index and file synchronization issues causing lost NPCs, crashes or false warnings.
- Fixed stale NPC data after unloading, avoided redundant writes and added repeated-unload warnings.
- Fixed the preset browser failing to list custom and world presets saved in the SNBT format.
- Fixed speech bubbles losing their text and turning translucent with Iris shaders.
- Fixed the "Opacity" of an NPC being ignored while a shader pack is active.
- Fixed text formatting and macro parsing for translated speech bubbles and mod API texts.
- Fixed speech bubbles and their text staying hidden behind blocks while a shader pack is active.
- Added
minLightLevelto keep speech bubbles readable in dark surroundings.
### 7.10.0
- Fixed #829 by allowing bats and other non-walking mobs as the render entity of a Doppler NPC.
- Fixed the Wandering Trader NPC rendering without its texture.
- Fixed NPCs rendered as a bat, frog or warden showing a static pose instead of their animation.
- Fixed the NPC name tag showing above the previews in the "Custom Models" configuration.
- Fixed speech bubbles being cut off by walls, doorframes and the NPC's own body.
- Fixed the previews in the "Custom Models" configuration.
- Changed the previews in the "Custom Models" configuration to stand on a common ground line.
- Changed overlapping speech bubbles to move apart and to stay visible when the NPC is off-screen.
- Changed "Navigation: Automatic" to use flying movement for NPCs rendered as a flying mob.
- Changed the render entity list to hide seats, paintings, thrown items and other non-mob entities.
- Added a "Min. hover height" slider for flying NPCs and client settings for speech bubbles.
### 7.9.0
- Fixed modded fish NPCs, like the ones of Tide 2, spinning around instead of swimming upright.
- Fixed "Navigation: Automatic" using ground movement for water NPCs and aquatic model NPCs.
- Fixed the "Random Swimming" objective never moving an NPC that uses aquatic navigation.
- Fixed a swimming NPC shaking or twitching in place instead of holding its tilt and swim depth.
- Fixed a swimming NPC turning in circles forever when it could not reach its next path point.
- Fixed an NPC that fell into water never getting out of it again.
- Fixed a following NPC searching a new path every tick while its target was unreachable.
- Fixed the "Move to" actions stopping short of a raised target or not starting while in the air.
- Fixed "Move back to Home" ignoring height differences and never returning from beyond 32 blocks.
- Fixed the "Opacity" input field being too narrow to show a value of 100.
- Fixed a damaged NPC with an Easy Model Entities model never flashing red.
- Changed modded water NPCs to swim level, vanilla water mobs keep their tilt as before.
- Changed the "Move to" actions to walk up to 48 blocks and to teleport only beyond that range.
- Changed "Move to" and "Move back to Home" to give up after three seconds without progress.
- Changed the timeout of a "Move to" action to count real ticks, it ran twice as long before.
- Changed a new "Random Swimming" objective to rank below following, fleeing and attack goals.
- Changed "Opacity" of an NPC with an Easy Model Entities model to be applied by that mod itself.
- Changed the minimum Easy Model Entities version to 2.3.0, older versions disable the integration.
- Added "Depth below surface" and "Height above floor" sliders for the swim level of an NPC.
- Added log entries for the NPC files written on a world save, with a warning above 250 ms each.
### 7.8.1
- Fixed #827 by rendering fish NPCs in water upright instead of always flopping on their side.
- Fixed #828 by keeping a damaged NPC from blocking the world save, it now falls back to defaults.
- Fixed a restored NPC picking up a random preset ID that changed with every save.
- Changed NPC data to only be written to disk when it actually changed.
### 7.8.0
- Fixed smaller text and UI issues.
- Changed an NPC that is already standing at its target position to finish the movement right away.
- Changed the "None" skin tab to "Advanced", which now holds "Disable Skin" and the texture field.
- Changed the minimum Easy Model Entities version to 2.2.0, older versions are no longer accepted.
- Added a "Move to" action, which sends an NPC to a position, a player, its owner or its home.
- Added a "Move to and Wait" action, which runs the following actions only after the arrival.
- Added an arrival radius, a timeout and an optional teleport to both move actions.
- Added an "Opacity" attribute from 0 to 100, which fades body, armor and hand items together.
- Added a "Set Opacity" action, which turns an NPC into a ghost or hides it completely.
- Added the "Lantern Wraith" preset, a ghost walking a square with a short line at every corner.
- Added API access to the move actions and the opacity of an NPC.
- Added a "Resource Location" skin type, which renders any texture of a mod or a resource pack.
- Added an "Advanced" skin tab, which previews the NPC with the entered texture before applying it.
### 7.7.7
- Fixed #821 by keeping the transparency of 64x64 skins, which Fresh Moves needs for its eyes. Skins
- Fixed #818 by running trade actions for Villager and Wandering Trader NPCs as well.
- Fixed a dialog with several text variants switching its speech bubble size every second.
- Fixed the skin cache storing the processed image instead of the original download.
- Fixed the untranslated interval names, like
PER_DAY, of the "Execution Limit" condition. - Fixed the
sitanimation of Easy Model NPCs, which never used the built-in sitting pose. - Fixed the speech bubble being cut off by the head of an NPC when a player stood close to it.
- Changed speech bubbles to keep their screen size and to move down or aside when a player is close.
- Changed the speech bubble text to render 20% larger than a name tag.
- Changed a time based action set with a "Wait" action to run in order instead of picking one entry.
- Changed dialog texts to wrap later, so an existing dialog can switch to the wider screen layout.
- Changed fallback actions to skip screen actions without a player, like the regular actions do.
- Changed the minimum Easy Model Entities version to 2.1.0, older versions disable the integration.
- Added a "Wait" action, which pauses the following actions of an event for a chosen duration.
- Added the "Countdown Timekeeper" preset, a speech bubble count to ten ending in sound and sparks.
- Added scaling and rotation for Doppler NPCs behind the "Experimental Features" checkbox. Both only
- Added a "Sound" action, which plays a sound at the NPC with sound category, volume and pitch.
- Added "Every 5 Minutes" and "Every 15 Minutes" to the "Execution Limit" condition.
- Added a "Player Idle" condition, which checks how long a player has not moved.
- Added an "Immovable" attribute, which keeps an NPC in place against pushing and knockback.
- Added
/easy_npc pauseto pause a single NPC or all NPCs; the global pause ends with the server. - Added API access to the sound action, the pause state and the idle time of a player.
- Added a texture override per model slot for Easy Model NPCs over
/easy_npc render texture. - Added a "Repeat" playback mode with a count and a time limit to the "Play Animation" action.
- Added API access to animation variants, texture slots and textures of Easy Model NPCs.
### 7.6.0
- Fixed unclear mod conflict errors for duplicate entity data tracker IDs.
- Fixed third-party health bars rendering over NPC previews in configuration and dialog screens.
- Fixed Doppler and Easy Model Entities NPCs using default hitboxes instead of their model size.
- Fixed the
/easy_npccommands suggesting no NPC UUIDs at all on a server. - Fixed the pose list of the "Set Pose" action drawing over its input field.
- Fixed the untranslated "Loop", "After current" and "Action Data Type" labels of the action editor.
- Fixed the missing hint text of the "Chance" condition.
- Fixed long condition hints running out of the editor screen instead of wrapping.
- Fixed the misaligned help icons and text buttons of the "Message" action.
- Fixed changes to the "Set Pose", "Play Animation" and "Stop Animation" actions not being saveable.
- Fixed the speech bubble text sitting closer to its upper border than to its lower one.
- Changed the NPC suggestions to list the crosshair NPC first and only own NPCs without permissions.
- Changed a preset export to only store what differs from a new NPC, without position or owner.
- Changed a preset without objectives or actions to fall back to the defaults of its NPC type.
- Changed events without a player, like "On Spawn" or "On Kill", to check their conditions. An
- Changed a time based action to pick the owner as
@initiatorwhenever the owner is nearby. - Changed speech bubbles to stay visible from 5 up to 18 seconds, depending on the text length.
- Changed the "Set Pose" action to only show its input field for the "custom" pose entry.
- Added time based actions on five fixed steps, from every ~1 second up to every ~15 minutes.
- Added a "Message" action for chat, system message and speech bubble text without a command.
- Added text variants, a sender name, a recipient and translation keys to the "Message" action.
- Added the speech bubble graphic as
easy_npc:textures/gui/speech_bubble.pngfor resource packs. - Added a "Chance" condition in percent and a "Relationship" condition for owner and faction.
- Added spawn, owner login, state change, day / night, weather and the missing "On Trade" events.
- Added a base preset per NPC type under
easy_npc:api/preset/base/, usable as a parent preset. - Added the "Wandering Companion" preset, a talkative NPC built from time based messages.
- Added an action registry, an action handler, a preset validator and richer event data for mods.
- Added a tooltip with name, type and distance to every NPC suggestion of the
/easy_npccommands. - Improved the NPC suggestions, which appear without typing and tolerate a near miss of one block.
### 7.5.0
- Fixed #814 by giving every Cobblemon NPC its own animation state instead of one per species.
- Fixed #813 by letting "Move back to Home" work at any distance instead of only near its home.
- Fixed #812 by checking once per session whether a player changed their skin.
- Fixed #810 by accepting Cobblemon aspects of resource packs instead of only "shiny" and "female".
- Fixed the home position of an NPC always reading as unset, which hid "Home" in the configuration
- Fixed NPCs spawned from a preset, the preset browser or a respawn never getting a home position.
- Fixed an NPC spawned from the preset browser keeping the home position of the world the preset was
- Fixed NPCs being drawn as a white silhouette with a shadow in the configuration, skin and preset
- Fixed the server crashing when an NPC with a "Tempt" objective ticked its goals.
- Fixed a single or boss spawner spawning without any limit when its preset carried no stored NPC.
- Fixed the "Legacy Easy NPC Data" warning appearing for newly created NPCs.
- Fixed missing transparency corrections for old 64x32 skins, which showed layer artifacts.
- Fixed the player skin screen freezing for a moment while a player name was looked up.
- Fixed the "Reset look at ..." objective label, which read "Reset loot at ..." in some languages.
- Fixed the "No Gravity" attribute being ignored after a preset import, which let NPCs fall.
- Fixed the Fabric game tests, which crashed on start because of the development helper mods.
- Fixed NPCs losing their owner when they were spawned again after a despawn.
- Fixed objectives being deleted from an NPC when the mod providing them was missing at start.
- Fixed importing a preset without a stored id, which spawned an NPC without owner and home.
- Fixed "Follow owner" and "Look at owner" keeping their old target after the owner was changed.
- Fixed attack targets staying assigned to an NPC after the targeted entity was gone.
- Fixed the "Look at Item" objective, which could be stored but never did anything.
- Fixed walking animation for Doppler NPC and 3rd party models.
- Fixed Forge never running its server start-up step, which left NPC tracking, factions and the
- Fixed Forge development runs starting without any mixins, which disabled the vanilla entity
- Changed the movement objectives to a fixed order: flee, follow, return home, then stroll. NPCs
- Changed inserting a preset into a vanilla monster spawner to keep its delay, count and range.
- Changed "Follow owner" and "Look at owner" without a chosen target to follow the owner of the NPC.
- Changed datapack presets to
easy_npc/preset/, the old folder still works, but only for easy_npc. - Changed the preset browser to always list its entries in the same order.
- Removed the experimental user-defined NPCs; the extra config file is no longer read or created.
- Removed the unused
SERVER_SKINskin type. - Added a new game test structure to support game tests in 1.21.11 and higher.
- Added a reload button to each entry of the player skin screen, to fetch a single skin again.
- Added the reason to the log whenever an NPC is removed, so an unexpected despawn can be traced.
- Added suggestions to
/easy_npc render set species. - Added support for presets from other mods, which no longer have to use the
easy_npcnamespace. - Added a preset visibility that hides a preset from the preset browser and the NPC screens.
- Added a teleport distance and a resting spot offset to the follow objectives.
- Added item tags, a "can be scared" option and a "only without owner" option to "Follow item".
- Added an item field to the look objectives, so an NPC can watch a chosen dropped item.
- Added an identifier per NPC, so a mod can find its own NPCs again.
- Added an option to spawn an NPC again when its owner logs in.
- Added game tests for NeoForge, which had none, and restored the spawn egg, dialog screen, data
- Added game tests for every configuration and editor screen, covering all three mod loaders.
- Added game tests for the home position, covering the spawn default, the stored value and
- Improved the model name parsing, which mistook a species ending in "_shiny" for a variant.
- Improved following of flying NPCs, which now steer directly when there is no path through the air.
- Improved third party support with an API for presets, own objectives and objective configuration.
### 7.4.0
- Fixed #807 by no longer pulling every same-type NPC within 32 blocks into a "Defend Self" fight.
- Fixed #805 by evaluating all visibility settings together instead of stopping at the first one.
- Fixed #804 by keeping the custom name on Doppler NPCs for name based textures and the name tag.
- Fixed #803 by adjusting assets to match typical Minecraft style instead of generic UI style.
- Fixed the day and night detection, which counted sunrise as night and sunset as day.
- Fixed the visibility in the Nether and the End, which used the Overworld time.
- Fixed the time and game mode visibility checkboxes appearing in a random order.
- Fixed game tests only being able to fail on their first assertion, which hid later failures.
- Fixed the "Saddled" horse skin variants, which never showed a saddle.
- Changed "Visible to Owner" and "Visible to Team" to also follow day, night and game mode.
- Changed Evoker, Illusioner and Vindicator variants without "Crossed Arms" to keep their arms down.
- Added a "Defend Faction" objective that attacks whoever hurt a nearby faction member or player.
- Added a system message when faction members fight each other and the faction stays out of it.
- Added a head equipment slot for Illagers so their captain banner can be removed or swapped.
- Added a day and night preview to the display configuration screen.
- Added unit and game tests for the visibility attributes and the faction defense.
- Improved the visibility check performance by reading the display attributes only once per check.
- Improved display attributes from older versions by completing them with their defaults.
- Improved the attack objective screen by disabling "Protect Owner" and "Defend Faction" when unset.
### 7.3.0
- Improved skin variants by carrying their data as typed fields instead of parsing variant names.
- Centralized the Cobblemon mod id and default model on shared constants.
- Reduced duplicated enum code with a shared
EnumUtilshelper forget(String)lookups. - Optimized villager profession and type lookups to use direct registry keys instead of scans.
- Optimized enum name lookups by caching tag names, ids and keys once at construction.
- Added unit and game tests for skin variants, villager resolution and the enum helper.
### 7.1.2
- Fixed #801 by using combination for NPC, Dialog and Action UUIDs to avoid collisions for action
### 7.1.1
- Fixed #800 by lazy loading entity types.
- Fixed #799 by fixing edge cases and adding additional documentation and better log messages.
- Fixed #798 by considering console, commands and command blocks as trusted command sources.
- Fixed a critical single-player / LAN issue where client and server NPCs shared the same registry.
- Fixed a memory leak in the configuration menu handling and added timeout and disconnect cleanup.
- Fixed duplicate downloads when several NPCs request the same skin at the same time.
- Fixed skin lookups failing after a error so a slow server no longer freezes the game.
- Fixed the URL skin screen freezing the game while checking a remote image; the check now runs in
- Added a new World Spawner block that limits an NPC preset across the whole world (all dimensions),
- Hardened remote skin downloads with a strict size limit and safe redirect handling to prevent
blockPrivateAddresses setting.- Improved server performance by only sending entity and player load events to NPCs that actually
### 7.0.0
- Fixed #794 by using the expected type for NPC rendering.
- Fixed scaling screen preview by pinning the entity feet to the 0 line of the scale ruler, so NPCs
box updates.
- Fixed #791 by adding Wandering Trader NPC type.
- Fixed #788 by extending the AI safeguards to Epic Fight and raw NPC variants (Piglin, Villager,
- Fixed #787, #531, #237 and #184 by adding a faction system with
/easy_npc factioncommands,
- Fixed #787, #771 and #572 by adding a new
targetobjectives tab to attack hostile factions or
- Fixed #786 by adding gender and shiny model variants for Cobblemon NPCs, searchable via
female
shiny in the model selection.- Fixed faction combat between invulnerable NPCs by adding the new
Attackable by Factionscombat
- Fixed Cobblemon model selection previews for oversized species by scaling with Cobblemon's own
- Fixed faction management edge cases by validating faction names, sorting faction lists and
- Fixed custom skin reloads by loading and clearing texture caches per skin model instead of always
- Improved the
Attackable by Players/Monsters/Factionscombat attributes to work independently of
Invulnerable, each opening a targeted hole for its own attacker group.- Improved preset command and network handling by splitting the large handlers into smaller focused
- Added Easy Model Entities Support.
- Added faction manager and faction editor screens to create, color and delete factions and manage
FACTION_MANAGEMENT security feature.- Added new
Miscattributes tab as home for the NPC faction assignment. - Added reusable warning and help icon components for inline hints with tooltips.
- Added additional unit and game tests for factions, target objectives and Cobblemon model variants.
### 6.25.0
- Fixed #782, #636, #622 by preserving data components during validations.
- Fixed #780 by caching remote texture downloads and reducing duplicate registrations.
- Fixed #767 by clamping attribute sliders against extreme values from other mods.
- Fixed #754 by adding custom data item matching for NPCs with actions and conditions.
- Fixed texture manager running in the wrong thread may cause crashes and deadlocks in >= 1.21.x.
- Fixed empty UUID handling for action conditions.
- Fixed execution limit reset for actions.
- Added texture registration queue to avoid multiple simultaneous downloads in the same tick.
- Added NPC coin, key and red token as consumable items for NPCs with actions and conditions.
- Added
Welcome Coin Traderas example NPC preset with custom coin, key and red token item data. - Added attribute safeguards against extreme values from other mods.
- Increased fallback max health value from 1024 to 4096 for high-health NPCs.
- Improved texture manager by reducing duplicate texture checks and registrations.
### 6.24.0
- Fixed #459, #775 by adding an option to block interactions with invisible NPCs.
- Fixed #774 startup crash related to optional Epic Fight and Cobblemon entity type maps.
- Fixed #773 by checking timed trade resets during base ticks and before opening trade screens.
- Fixed trade reset timing by increasing internal tickers correctly.
- Added time of day and weather conditions for #459.
- Added additional unit and game tests for trade resets, ticker handling and entity attributes.
- Added
Skywatch Scoutas example NPC preset with time of day and weather conditions.
### 6.23.0
- Fixed #774 by migrating isSunBurnTick error to 26.x.
- Fixed #772 by adjusting texture retries with 403 and 404 errors and lowering logging.
- Fixed #770 item rendering for Epic Fight NPCs (Evoker, Pillager, Vindicator and humanoid skins).
- Fixed #769 door loops with NPCs not reliably opening or closing doors.
- Fixed #760 by adding a dialog option and config setting (buttonConditionMode: LOCK or HIDE) to
- Fixed #709 by adding color picker popup for names with 32 colors and/or a manual RGB/hex value.
- Fixed NPC name color being reset when renaming without a specified color by preserving the
- Improved the door movement attributes so "Pass Door" is automatically enabled while "Open Door"
### 6.22.0
- Fixed #766 by passing the full server player context to command execution for better compatibility
- Fixed #764 by adding entity health, npc health conditions and NPC preset
Grukk, the Sparring Post as example for using these conditions.- Fixed #763 by making sure dialog button execution limits are now recorded.
- Fixed #758 by providing a example NPC preset named
One Wish Companion. - Fixed crashes related to 3rd party villager AI reading non-registered brain memories on Easy NPC
- Fixed Dialog buttons are not locked for server-side data as preparation for #760 and #644.
- Fixed #628 by adding conditional dialog opening support / command for better control over when
- Added brain AI for Piglin and Piglin Brute NPCs and registered the full vanilla brain memory set.
- Added additional guns to the gun tag for #757.
- Added a new "Open Dialog (Conditional)" action that opens a named dialog only if its conditions
- Added new entity health and npc health conditions for actions, dialogs and dialogs buttons.
- Added Piglin, Piglin Brute and Zombified Piglin NPCs invulnerable, for consistency with other
- Added a new "Knockback Immunity" combat attribute that prevents the NPC from being knocked back by
- Added a new "Explosion Immunity" combat attribute that makes the NPC immune to explosion damage
- Moved the "Projectile Collision" attribute to the Combat attribute screen, where it fits better
### 6.21.0
- Fixed item attachment for Illagers in crossed-arms pose.
- Fixed broken illager crossbow attack goal.
- Fixed crashes related to 3rd party items which are not renderable as hand items #756.
- Fixed crashes related to 3rd party mixins trying to access non-existing model parts #756.
- Fixed log.info spam message by reducing log verbosity and adding additional checks for custom
- Improved EasyNPCModelManager performance.
- Refactored NPC renderers to remove default hand item layer.
### 6.20.0
- Fixed crashes related to 3rd mods trying to access non-existing NPCs goals.
### 6.19.0
Note: This update adjusted the dialog background images by 10x6 pixels, which may require users to
adjust their custom dialog backgrounds if they are using custom ones.
- Fixed #752, #130 by adding dialog button condition support to allow to disable buttons.
- Fixed #683, #215 by adding typewriter effect support for dialog text.
- Fixed #690, #309 by allowing conditions for dialog, dialog buttons and interactions.
- Fixed smaller UI issues with dialog screen layout and background.
- Refactored dialog background images by 10x6 pixels on each side.
- Refactored dialog screen layout to better fit the new background size and improve appearance.
- Added typewriter effect and client configuration for dialog text.
- Added condition symbols to indicate the condition status for dialog, buttons and interactions.
- Added amount field for item conditions to allow checking for specific amounts of items.
- Added
Threshold Wardenas example NPC preset with various conditions and actions. - Added smaller bug fixes and optimizations related to dialog conditions and button states.
### 6.18.0
Note: This update changes the internal data format for conditions and actions, which may reset /
remove legacy existing execution-limit entries without stored IDs.
- Fixed #745 by adding conditions for actions to allow more complex and dynamic behavior.
- Fixed #652 by adding dialog button tooltip for longer texts.
- Fixed #687 by adding command value tooltip to show the full value.
- Added Experience Level conditions.
- Added Game-mode conditions.
- Added has item in inventory condition.
- Added has item in hand condition with (main hand and off-hand) support.
- Added player health condition.
- Added player tag condition.
- Added player team condition.
- Added Goldmere example NPC preset with various conditions and actions.
- Added negative condition support to allow negating conditions for more complex logic.
- Removed parameter pseudo IDs for
ActionDataEntryand replaced them with random UUIDs. - Refactored condition system to allow more condition types.
### 6.17.0
- Fixed #738 by adding additional tooltips for "Execute as player"
- Fixed to detailed logs by reducing log.info messages during startup and in-game.
- Added additional unit and game-tests.
### 6.16.0
- Fixed #732 by providing option to disable ESC key and close button for dialogs.
- Fixed #723 by avoid auto-close in specific cases like trading screens.
- Added general dialog configuration options to allow users to customize dialog behavior.
- Added avatar scaling and position offset options for dialogs.
- Added missing translation keys.
### 6.15.1
- Fixed #735 by extending the correct base class.
- Fixed several 26.1.2 specific issues from manual spawn testing.
### 6.15.0 (Trades, Player Heads, Epic Fight and QOL updates)
- Fixed #731 by resyncing species data, if species list is empty on the client.
- Fixed #730 by improving Epic Fight integration and enabled experimental features.
- Fixed #729 by making sure trade uses are stored correctly.
- Fixed #728 by adding custom head support for player heads.
- Fixed #689 by showing remaining trade uses and allow resetting manually and automatically.
- Fixed #218 and #132 with new trade configuration screen and better support for custom trades.
- Fixed trade specific edge by switching between basic and normal/advanced trading mode.
- Fixed dialog button text is truncated with tooltip showing the full text.
- Fixed Cobblemon animation issues by syncing animation state with Cobblemon Animation System.
- Added per trade specific actions to allow users triggering actions after buys.
- Added trade reset button to reset all trades easily.
- Added trade usage information to trade configuration screen.
- Added experimental feature state to allow users to manually enable experimental features.
- Added Griselda Grindstone as example trader with actions.
- Cleanup test files.
### 6.14.0
- Fixed #727 by making sure changes are synced to the client when changing values.
- Fixed #726 by adding additional allow lists for specific commands.
- Fixed #686, #389, #304, #211 by adding basic Cobblemon support with Cobblemon NPC.
- Fixed dialog misalignment and navigation issues by adjusting dialog sprites and screens.
- Fixed x and z root rotation by correcting rotation logic and pivot calculations.
- Added basic Cobblemon support with custom NPC type and model for testing.
### 6.13.0 (Security and Permissions Updates)
Notes: This update includes better security checks and permissions for multiplayer environments. It
allows to execute server commands which can be potentially dangerous if used with malicious intent.
- The update splits the model root data and logic from the rest of the model part data and logic,
- Fixed #725 by separating model root data and logic from the rest of the model part data and logic.
- Fixed #722 by supporting .sbnt files as local presets.
- Fixed #675 by adding dedicated assets for dialog and config screen backgrounds.
- Fixed #605, #532, #529 with new security checks and permissions system.
- Fixed #469, #311 by adding experimental api documentation and examples for custom model support.
- Fixed double rendering of config screen background by removing redundant background rendering.
- Fixed Ghast and Slime hitbox and name tag position issues by adjusting bounding box.
- ⚠️ Added security checks to prevent potential exploits and allow safe usage in multiplayer
- Replaced dynamic dialog screen background with a static one for better performance, customization
- Replaced dynamic config screen background with a static one for better performance.
- Refactored config-ui specific components and removed them from the core mod.
- Removed duplicated sprite sheets.
- Prepare permission system for possible Luck Perms integration in the future like #712.
- General code cleanup and optimizations related to config screen rendering and assets.
### 6.12.0
- Fixed #714 by adding additional checks for custom model part list based on vanilla models.
- Fixed #713 by reducing log verbosity with downgraded per-NPC INFO messages to DEBUG and
- Fixed #711 by reduced oversized startup/config log output.
- Fixed NBT validation guard to prevent unnecessary buffer allocations in production.
- Added model part name constants to EasyNPCModelManager for consistent usage across mixins.
- Improved RenderEntityTypeSupportConfig by enhancing filter logic and optimizing data structures
- Removed verbose debug logs that dump large data structures.
### 6.11.1
- Fixed #710 by improving backward-compatible parsing for recoverable trade data.
### 6.11.0
- Fixed #703 rendering issue with new custom layer system and hand renderings.
- Fixed #701 by adding additional safeguards and logging for invalid trading offers.
- Fixed smart animation not working properly with modified head position.
- Fixed head tracking by moving player detection back to server side-only.
- Fixed CustomLookAtPlayerGoal to better handle edge cases and reduce jitter.
- Fixed issue with Doppler NPCs keeping their hand inventory.
- Improved PoseManager logging message.
- Updated logo with a new design.
### 6.10.0
- Fixed #698 by adding try and catch for 3rd party entity creation.
- Fixed #695 by clearing model part rotations/positions when switching to a
DEFAULTvanilla pose. - Fixed #695 by applying lock rotation and pose animation only when the NPC is idle.
- Fixed #695 by correcting root rotation pivot to use actual bounding box height instead of 0.5f.
- Fixed multiple objective registration issues including inverted
isTargetedPlayercheck, wrong
targets.
- Fixed goal reference being retained after objective is unregistered.
- Removed auto-lock of ROOT rotation when loading poses; root lock is now user-controlled.
- Added lock rotation checkbox to the advanced and custom pose configuration screens.
- Added model-specific pose key filtering in
ConfigurationMenuHandlerfor the default pose screen. - Added unit tests for
CustomPosition,CustomRotation,CustomScale,ModelPose,
ModelAnimationBehavior and ModelAnimationData.- Added
NPCDataIsolationTestHelperand game tests for Fabric and Forge. - Increased max head yaw range from 60° to 65°.
### 6.9.0
- Fixed #692, #666 by adding caching and safeguards to prevent redundant retriggering of NPC entity
- Fixed #651, #617 by adding basic custom poses for all supported NPC types.
- Fixed #597 by adding additional Flee goals for fleeing from players, villagers, monsters, ...
- Fixed pose loading to read directly from mod resources instead of copying files to disk.
- Fixed duplicate
saveNPCcalls on entity join by checking existing registry entry first. - Added
despawnandspawncommands to remove and re-spawn NPCs by UUID with configurable removal
- Added
ModelPoseAPIandEasyNPCEntityHandlerpublic API classes for controlling NPC poses and
- Added pose data files for all supported NPC types.
- Added lock rotation checkbox to the basic pose configuration screen.
- Added
MoveToPositionGoalto move an NPC to a position before executing a callback action. - Added
EasyNPCLookControlandEasyNPCBodyRotationControlto respect locked root rotation. - Added synced owner change and dimension change to the NPC entity data index.
- Added EasyNPCItemAttachmentLayer into various entity renderers.
- Added dedicated
Flee Objectiveconfiguration tab with objectives for fleeing creepers, monsters,
- Added
FOLLOW_ITEMobjective to the follow objectives tab to make NPCs follow item entities by
minecraft:apple).- Added
LookAtEntityByUUIDGoaland enabled the look-at-entity-by-UUID and look-at-owner objectives
- Added
persistentflag toSynchedDataIndexso that transient indices (e.g. crossbow charge,
- Added configurable
customParticlesEnabledflag toSlimeBasefor API consumers. - Added
SoundType.PETand mappedCAT_PURRto the cat NPC for tamed ambient sound variety. - Reduced log verbosity for periodic NPC save operations from INFO to DEBUG.
### 6.8.3
- Fixed #680 by enforcing version miss-match by upgrading network protocol version.
- Fixed #679 by resetting position, rotation and size for name tag.
- Fixed #665 by adding multi state slide for root rotations.
- Fixed #664 by adding option to disable following mouse cursor for easier posing.
- Fixed #663 by improve support for X and Z root rotations.
- Fixed #661 by adding quick rotation with NPC wand and sneaking to the NPC to rotate the root to
- Fixed move tool is wrongly triggering interactions by adding check for move tool in interaction
- Fixed Preset Item is wrongly triggering interactions by adding check for preset item in
- Fixed Slime and Ghast hitbox and name tag position issues by adjusting bounding box and eye height
- Fixed Slime and Ghast GUI position by adjusting offset values.
### 6.8.2
- Fixed #677 by extending
SafeMerchantDatawith notifyTrade to avoid crashes. - Added progression data support for leveling up NPCs based on player interactions and actions.
- Added global NPC tracking system for better management and debugging of NPCs across the world.
- Added
OriginalModelConfig.withVariantTexture()option to allow using variant textures with the
### 6.8.1
- Fixed #676 by using existing preset helper method instead of custom one.
### 6.8.0 (Adding API support)
- Fixed #667 by adding warning messages and additional checks for invalid network packets.
- Fixed Horse spawn eggs model.
- Fixed pose support for allay, chicken, creeper, fox, ghast, horse, illager, iron golem, slime and
- Added NPC base classes for better API support.
- Added NPC raw classes for advanced API support.
- Added Slim and Ghast NPC types.
- Added Custom Model API for easier integration with other mods and custom models.
- Refactored internal data handling and registration for better maintainability and future
### 6.7.1
- Fixed #657 and #656 by adding additional client side checks for vanilla bug.
### 6.7.0
- Fixed #650 by implementing Wolf Leg Animations in setupAnim method.
- Fixed #648 by fixing canBeHitByProjectiles translation.
- Fixed #645 by adding
allowBypassInvulnerabilityconfig option to allow/deny bypassing
- Fixed delete button showing label even with small width.
- Fixed up and down buttons not positioned correctly in some cases.
- Fixed name tag showing up for dialog and configuration UI.
- Fixed distance action issue were multiple actions are not properly triggered.
- Fixed issues with NPC presets.
- Fixed Cat NPC and Wolf NPC owner data not syncing properly.
- Added preset browser for easier selection of common NPC presets.
- Added preset .snbt (text) export and import functionality for sharing NPC presets.
- Refactored existing NPC presets to use new .snbt format.
- Refactored spawner system to use new preset format for better maintainability and future
### 6.6.2
- Fixed #643 by rework scaling system.
- Fixed scaling not properly updating hitbox and nametag position after restart / reload.
- Added MID and MOUSE_OVER name tag visibility modes for finer control over NPC name display.
- Added team-based name tag visibility support respecting vanilla Team.
### 6.6.1
- Fixed #638 by refactored internal data handling for display attributes.
### 6.6.0
- Fixed #634 by implementing asynchronous texture loading with dedicated thread pool.
- Fixed texture loading blocking render thread causing game freezes.
- Fixed race conditions in texture reload protection using atomic operations.
- Fixed resource leaks in HTTP connections during remote texture downloads.
- Fixed URL validation spam allowing multiple simultaneous downloads of the same texture.
- Fixed exception handling for remote image validation preventing crashes on invalid URLs.
- Fixed
defineId called for:warning messages during NPC loading. - Refactored texture loading architecture with multi-level defense and rate limiting.
- Refactored entity data registration logic for better maintainability.
- Converted data classes to modern Java records for better immutability and thread-safety.
- Added thread-safe session server spam protection with ConcurrentHashMap.
- Added comprehensive error recovery with automatic cooldown reset on failures.
- Improved texture loading with 2-thread pool and 500ms rate limiting.
- Improved exception handling with specific catch blocks for IIOException and FileNotFoundException.
### 6.5.2
- Fixed Villager profession and job skin issue.
- Improved GitHub workflows by adding cache for gradle dependencies.
- Improved Gradle build time and cleanup tasks.
### 6.5.1
- Fixed #632 by implementing ON_KILL action type and event.
- Fixed #629 by improving texture handling performance, caching, and memory usage.
- Fixed kill command is not working on NPCs.
- Fixed texture reload protection preventing cache reload after eviction.
- Fixed WebP validation bug in remote image validator (missing return statement).
- Refactored texture handling logic for better maintainability and future improvements.
- Added time-based reload protection (60 seconds) to replace permanent blocking mechanism.
- Added missing variant textures for chicken, pig and wolf.
- Added additional unit tests for texture handling.
- Improved gradle build tasks.
### 6.5.0
- ⚠️ Removed jar-in-jar bundle approach for better mod compatibility and api capabilities.
- Fixed #627 scissor implementation for better compatibility with other mods.
- Fixed #625 lively animation issues when using rotated or moved model parts.
- Fixed default animation are canceled when using scaled model parts.
- Added better pose animation control with smart, default und none options.
### 6.4.1
- Fixed #626 screen switching logic for different NPC UUIDs, thanks to
Spawnbladefor the detailed
### 6.4.0
- Fixed #626 by improving dialog data validation and error handling.
- Fixed #623 by refactoring render data and render handling.
- Fixed #622 by making sure custom data are properly saved and loaded.
- Fixed open dialog action type to allow opening dialogs from other NPCs.
- Fixed hashing issues by adding missing equals and hashCode methods for ConditionDataSet and
- Added custom data test item for #622 and easier testing of custom data.
- Improved records and fixed potential issues with missing data.
### 6.3.0
- Refactored config ui specific components and removed them from the core mod.
- Fixed dialog data by filtering dialog data before sending to the client.
- Fixed dialog editor layout issues and improved usability.
- Fixed missing default values for some dialog data fields.
- Added dialog priority support to control the order of dialog execution.
- Added condition support for dialog and scoreboard actions.
- Added frequency support for dialog to limit how often an dialog can be shown.
- Added new NPC preset to for scoreboard and condition support.
- Improved dialog button data format by removing redundant fields.
### 6.2.0
- Fixed legacy custom name parsing.
- Fixed string injection within dialogs.
- Fixed missing translation for action types.
- Added scoreboard action type to increase, decrease, set scoreboard values.
- Added
@score(...)NPC macro to display scoreboard values in the dialog. - Added additional unit tests.
- Improved spin button with indicators and better usability.
### 6.1.2
- Fixed container and menu sync issues with missing close container packets.
- Fixed close button not working in some cases.
- Fixed jumping mouse cursor between screen transitions.
- Fixed translation files and removed duplicate and deprecated entries.
- Moved Easy NPC wand to existing core item tab instead of creating a new one.
- Added cat pose support for different model parts (except tail).
- Improved EasyNPCWand glowing effect performance by disabling it when not needed.
- Improved custom entity detection by excluding non-living entities like displays, makers, throwns
- Improved cat variant handling.
### 6.1.1
- Fixed #615 by checking if item is equipped in one of the hands.
- Fixed #612 by re-validating entity types.
- Fixed #610 by force sync of hat and head layers for specific models.
- Fixed orc textures.
- Fixed cat variant handling for 1.21.5.
- Fixed player render by adjusting render state
skinfield. - Fixed cat renderer by adjusting render state
texturefield. - Fixed position, scaling and rotation preview.
- Fixed Fairy model.
- Improved custom model support and performance, by moving related logic into to client side only.
- Improved caching of player to UUID mappings for player skins.
- Limited change model commands and logic to Doppler NPCs only.
- Added renderEntityRaw method to render NPC as-it-is.
### 6.1.0 ✨
This is a major release. Please back up your worlds and NPC data before updating. This version
contains many improvements, optimizations, and internal changes that are **not fully compatible**
with earlier releases.
⚠️ Breaking changes
- Existing NPCs and their configuration data from versions before 6.1.0 may not load correctly or
- Internal data formats and some behaviors have been refactored to support new use-cases.
🧩 New modular structure
Easy NPC is now split into three separate mods:
- Easy NPC** – Bundle that includes both Core and Configuration UI for a plug‑and‑play experience.
- Easy NPC: Core** – Lightweight runtime and logic for NPCs, with minimal dependencies. Intended
- Easy NPC: Configuration UI** – Standalone configuration interface for creating and editing NPCs.
🎯 Why this change?
- Allows servers and modpacks to ship only the **Core** mod on the server side for a leaner setup.
- Reduces memory usage and load times when the UI is not required everywhere.
- Makes development and testing faster by separating UI and core logic.
[history]: https://github.com/MarkusBordihn/BOs-Easy-NPC/commits/
[upgrade_guide]: https://github.com/MarkusBordihn/BOs-Easy-NPC/wiki/Upgrading
## Note
This change log includes the summarized changes. For the full changelog, please go to
the [GitHub History][history] instead.
Note: Please always back up your world / NPCs before updating to a new version!
Check the [upgrade guide][upgrade_guide] for more information.
### 7.15.0
- Fixed #838 by keeping preset imports silent when run through
/executeor command blocks. - Fixed #380 by applying the NPC limit to the default spawner as well.
- Fixed #849 by allowing resource pack sounds in the sound configuration.
- Fixed #349 by no longer spawning NPCs left-handed at random.
- Fixed #851 by locking dialog buttons per dialog, not across dialogs with the same label.
- Fixed deleted or duplicated NPCs returning, memory leaks and several owner and UI issues.
- Fixed the Epic Fight Wither Skeleton NPC missing its Epic Fight mob patch.
- Fixed off-center inventory screens and their close button overlapping the "Custom" trading tab.
- Fixed scaled Doppler NPCs keeping the full hitbox of the mimicked entity.
- Fixed NPCs on a player's shoulder ignoring their scale and the Doppler's mimicked model.
- Changed requirements: same mod version on client and server, Easy Model Entities 2.5.0+.
- Changed backups of all worlds and killed NPC data to expire after 30 days, see
storage.cfg. - Added "Jump", "Assist Owner" and "Follow Nearest Player" to fix #845, fix #310, fix #761.
- Added an NPC inventory with item pickup and death drops to fix #111, fix #197, fix #543, fix #670.
- Added "Sit on Shoulder", a boss bar and
/easy_npc debug core loglevelto fix #577, fix #219. - Added the "Hold" animation mode, a "Bank Teller" preset and new API methods for addons.
### 7.14.0
- Fixed #846 by keeping custom poses for players who start seeing the NPC later.
- Fixed attribute and trading settings missing for players who start seeing the NPC later.
- Fixed changed max uses, XP and trading type not shown in the trading screens until reload.
- Fixed
/easy_npc sound setchanges not reaching players until the NPC was reloaded. - Added game tests that check NPC poses and settings after respawns and for new players.
### 7.13.0
- Fixed color and formatting tags in dialog button names showing as plain text.
- Fixed the button preview in the editor showing lowercase names as a raw translation key.
- Fixed the "Move EasyNPC" item not working for NPC owners outside of creative mode.
- Fixed
/easy_npc owner setreporting success even when the owner could not be changed. - Fixed the game crashing when the URL or player skin screen showed a skin download error.
- Fixed the preset browser search showing no results after scrolling down the list.
- Changed the network protocol version, so client and server must run the same mod version.
- Added
@initiator,@npcand@score()support to dialog button names to fix #841. - Added automatic client tests with the Client Runtime Interface Toolkit.
- Larger core refactoring and code cleanup.
### 7.12.2
- Fixed the Fairy hitbox being far too small, so its name tag and speech bubble sat in its body.
- Fixed scaled NPCs keeping their old hitbox and eye level, so hits, clicks and looking missed.
- Fixed oversized names, lists and NPC data in network packets being read without any limit.
- Fixed invalid NPC positions, scales, attributes, names and durations from being applied.
- Changed Fairy NPCs to take up the space of their model, so they collide and can be clicked.
- Changed Skeleton, Stray and Bogged NPCs to the vanilla hitbox height, they were slightly short.
- Changed the network protocol version, so client and server must run the same mod version.
### 7.12.1
- Fixed #836 by always showing "Restore", including datapack presets, with a reason tooltip.
- Fixed preset import and export messages missing, wrong or not warning about replaced NPCs.
- Fixed the preset browser reloading on each keystroke, leaking NPCs and clearing the selection.
- Fixed selection box drop-down lists being covered by the checkboxes and labels behind them.
- Fixed the preset list sorting, filter order and layout clipping options in small windows.
- Fixed
/easy_npc preset import datawithout a position importing it as a default preset. - Fixed spawn rate limit leaks, unstable preset IDs and "Spawn New" stacking NPCs on one spot.
- Changed "Restore" to refuse instead of spawning a copy when it is not permitted.
- Added sorting, a match count, reload, auto-close, the NPC ID and tooltips for presets and skins.
- Added
matching <pattern>batch imports with limits, a confirmation and a clickable position.
### 7.12.0
- Fixed #833 by showing Easy NPC Wand outlines only to the wand holder, owner and admins.
- Fixed #834 by adding "Set Home Here" and "Reset Home" buttons to the position configuration.
- Fixed #835 by keeping the NPC ID and position in exported presets, so imports restore the same
- Fixed preset imports and spawn eggs losing the owner's list entry and owner objectives.
- Fixed NPCs restored from an automatic backup losing their owner and becoming ownerless.
- Fixed selection lists showing only their first six entries and hiding the rest.
- Changed importing a preset to update the original NPC at its stored position instead of adding a
- Changed completed trades to play the "Trade completed" sound, which stayed silent before.
- Changed the API dialog call to report an unknown dialog label instead of always reporting success.
- Changed NPCs without arms to carry held items at the head or body instead of hiding them.
- Changed the optional Easy Model Entities dependency to require version 2.4.0 or newer.
- Added a "Sound" configuration with sounds for dialogs, speech, swimming, eating and fall damage.
- Added a searchable sound selection with volume and pitch sliders to the "Sound" configuration.
- Added a "Block Vehicles" option to keep NPCs out of boats, minecarts and modded chairs.
- Added the profession selection to all skin configurations and a new built-in skin per NPC type.
- Added client settings to hide name tags behind walls and
highlightEnabledfor wand outlines. - Added an "Exists" condition operation and API access to NPC movement, actions and presets.
### 7.11.0
- Fixed #828 by no longer freezing the server on logout when NPCs follow or watch the player.
- Fixed #831 by moving routine NPC removal messages to the debug log.
- Fixed #832 by making humanoid NPCs ignore custom player models, animations and poses.
- Fixed hourly NPC backups stuttering on large worlds and retaining timestamps of removed NPCs.
- Fixed hourly NPC backups losing the identity, owner and position of the backed-up NPC.
- Fixed owner-login restoration duplicating, repeatedly restoring, reviving or moving unloaded NPCs.
- Fixed NPC index and file synchronization issues causing lost NPCs, crashes or false warnings.
- Fixed stale NPC data after unloading, avoided redundant writes and added repeated-unload warnings.
- Fixed the preset browser failing to list custom and world presets saved in the SNBT format.
- Fixed speech bubbles losing their text and turning translucent with Iris shaders.
- Fixed the "Opacity" of an NPC being ignored while a shader pack is active.
- Fixed text formatting and macro parsing for translated speech bubbles and mod API texts.
- Fixed speech bubbles and their text staying hidden behind blocks while a shader pack is active.
- Added
minLightLevelto keep speech bubbles readable in dark surroundings.
### 7.10.0
- Fixed #829 by allowing bats and other non-walking mobs as the render entity of a Doppler NPC.
- Fixed the Wandering Trader NPC rendering without its texture.
- Fixed NPCs rendered as a bat, frog or warden showing a static pose instead of their animation.
- Fixed the NPC name tag showing above the previews in the "Custom Models" configuration.
- Fixed speech bubbles being cut off by walls, doorframes and the NPC's own body.
- Fixed the previews in the "Custom Models" configuration.
- Changed the previews in the "Custom Models" configuration to stand on a common ground line.
- Changed overlapping speech bubbles to move apart and to stay visible when the NPC is off-screen.
- Changed "Navigation: Automatic" to use flying movement for NPCs rendered as a flying mob.
- Changed the render entity list to hide seats, paintings, thrown items and other non-mob entities.
- Added a "Min. hover height" slider for flying NPCs and client settings for speech bubbles.
### 7.9.0
- Fixed modded fish NPCs, like the ones of Tide 2, spinning around instead of swimming upright.
- Fixed "Navigation: Automatic" using ground movement for water NPCs and aquatic model NPCs.
- Fixed the "Random Swimming" objective never moving an NPC that uses aquatic navigation.
- Fixed a swimming NPC shaking or twitching in place instead of holding its tilt and swim depth.
- Fixed a swimming NPC turning in circles forever when it could not reach its next path point.
- Fixed an NPC that fell into water never getting out of it again.
- Fixed a following NPC searching a new path every tick while its target was unreachable.
- Fixed the "Move to" actions stopping short of a raised target or not starting while in the air.
- Fixed "Move back to Home" ignoring height differences and never returning from beyond 32 blocks.
- Fixed the "Opacity" input field being too narrow to show a value of 100.
- Fixed a damaged NPC with an Easy Model Entities model never flashing red.
- Changed modded water NPCs to swim level, vanilla water mobs keep their tilt as before.
- Changed the "Move to" actions to walk up to 48 blocks and to teleport only beyond that range.
- Changed "Move to" and "Move back to Home" to give up after three seconds without progress.
- Changed the timeout of a "Move to" action to count real ticks, it ran twice as long before.
- Changed a new "Random Swimming" objective to rank below following, fleeing and attack goals.
- Changed "Opacity" of an NPC with an Easy Model Entities model to be applied by that mod itself.
- Changed the minimum Easy Model Entities version to 2.3.0, older versions disable the integration.
- Added "Depth below surface" and "Height above floor" sliders for the swim level of an NPC.
- Added log entries for the NPC files written on a world save, with a warning above 250 ms each.
### 7.8.1
- Fixed #827 by rendering fish NPCs in water upright instead of always flopping on their side.
- Fixed #828 by keeping a damaged NPC from blocking the world save, it now falls back to defaults.
- Fixed a restored NPC picking up a random preset ID that changed with every save.
- Changed NPC data to only be written to disk when it actually changed.
### 7.8.0
- Fixed smaller text and UI issues.
- Changed an NPC that is already standing at its target position to finish the movement right away.
- Changed the "None" skin tab to "Advanced", which now holds "Disable Skin" and the texture field.
- Changed the minimum Easy Model Entities version to 2.2.0, older versions are no longer accepted.
- Added a "Move to" action, which sends an NPC to a position, a player, its owner or its home.
- Added a "Move to and Wait" action, which runs the following actions only after the arrival.
- Added an arrival radius, a timeout and an optional teleport to both move actions.
- Added an "Opacity" attribute from 0 to 100, which fades body, armor and hand items together.
- Added a "Set Opacity" action, which turns an NPC into a ghost or hides it completely.
- Added the "Lantern Wraith" preset, a ghost walking a square with a short line at every corner.
- Added API access to the move actions and the opacity of an NPC.
- Added a "Resource Location" skin type, which renders any texture of a mod or a resource pack.
- Added an "Advanced" skin tab, which previews the NPC with the entered texture before applying it.
### 7.7.7
- Fixed #821 by keeping the transparency of 64x64 skins, which Fresh Moves needs for its eyes. Skins
- Fixed #818 by running trade actions for Villager and Wandering Trader NPCs as well.
- Fixed a dialog with several text variants switching its speech bubble size every second.
- Fixed the skin cache storing the processed image instead of the original download.
- Fixed the untranslated interval names, like
PER_DAY, of the "Execution Limit" condition. - Fixed the
sitanimation of Easy Model NPCs, which never used the built-in sitting pose. - Fixed the speech bubble being cut off by the head of an NPC when a player stood close to it.
- Changed speech bubbles to keep their screen size and to move down or aside when a player is close.
- Changed the speech bubble text to render 20% larger than a name tag.
- Changed a time based action set with a "Wait" action to run in order instead of picking one entry.
- Changed dialog texts to wrap later, so an existing dialog can switch to the wider screen layout.
- Changed fallback actions to skip screen actions without a player, like the regular actions do.
- Changed the minimum Easy Model Entities version to 2.1.0, older versions disable the integration.
- Added a "Wait" action, which pauses the following actions of an event for a chosen duration.
- Added the "Countdown Timekeeper" preset, a speech bubble count to ten ending in sound and sparks.
- Added scaling and rotation for Doppler NPCs behind the "Experimental Features" checkbox. Both only
- Added a "Sound" action, which plays a sound at the NPC with sound category, volume and pitch.
- Added "Every 5 Minutes" and "Every 15 Minutes" to the "Execution Limit" condition.
- Added a "Player Idle" condition, which checks how long a player has not moved.
- Added an "Immovable" attribute, which keeps an NPC in place against pushing and knockback.
- Added
/easy_npc pauseto pause a single NPC or all NPCs; the global pause ends with the server. - Added API access to the sound action, the pause state and the idle time of a player.
- Added a texture override per model slot for Easy Model NPCs over
/easy_npc render texture. - Added a "Repeat" playback mode with a count and a time limit to the "Play Animation" action.
- Added API access to animation variants, texture slots and textures of Easy Model NPCs.
### 7.6.0
- Fixed unclear mod conflict errors for duplicate entity data tracker IDs.
- Fixed third-party health bars rendering over NPC previews in configuration and dialog screens.
- Fixed Doppler and Easy Model Entities NPCs using default hitboxes instead of their model size.
- Fixed the
/easy_npccommands suggesting no NPC UUIDs at all on a server. - Fixed the pose list of the "Set Pose" action drawing over its input field.
- Fixed the untranslated "Loop", "After current" and "Action Data Type" labels of the action editor.
- Fixed the missing hint text of the "Chance" condition.
- Fixed long condition hints running out of the editor screen instead of wrapping.
- Fixed the misaligned help icons and text buttons of the "Message" action.
- Fixed changes to the "Set Pose", "Play Animation" and "Stop Animation" actions not being saveable.
- Fixed the speech bubble text sitting closer to its upper border than to its lower one.
- Changed the NPC suggestions to list the crosshair NPC first and only own NPCs without permissions.
- Changed a preset export to only store what differs from a new NPC, without position or owner.
- Changed a preset without objectives or actions to fall back to the defaults of its NPC type.
- Changed events without a player, like "On Spawn" or "On Kill", to check their conditions. An
- Changed a time based action to pick the owner as
@initiatorwhenever the owner is nearby. - Changed speech bubbles to stay visible from 5 up to 18 seconds, depending on the text length.
- Changed the "Set Pose" action to only show its input field for the "custom" pose entry.
- Added time based actions on five fixed steps, from every ~1 second up to every ~15 minutes.
- Added a "Message" action for chat, system message and speech bubble text without a command.
- Added text variants, a sender name, a recipient and translation keys to the "Message" action.
- Added the speech bubble graphic as
easy_npc:textures/gui/speech_bubble.pngfor resource packs. - Added a "Chance" condition in percent and a "Relationship" condition for owner and faction.
- Added spawn, owner login, state change, day / night, weather and the missing "On Trade" events.
- Added a base preset per NPC type under
easy_npc:api/preset/base/, usable as a parent preset. - Added the "Wandering Companion" preset, a talkative NPC built from time based messages.
- Added an action registry, an action handler, a preset validator and richer event data for mods.
- Added a tooltip with name, type and distance to every NPC suggestion of the
/easy_npccommands. - Improved the NPC suggestions, which appear without typing and tolerate a near miss of one block.
### 7.5.0
- Fixed #814 by giving every Cobblemon NPC its own animation state instead of one per species.
- Fixed #813 by letting "Move back to Home" work at any distance instead of only near its home.
- Fixed #812 by checking once per session whether a player changed their skin.
- Fixed #810 by accepting Cobblemon aspects of resource packs instead of only "shiny" and "female".
- Fixed the home position of an NPC always reading as unset, which hid "Home" in the configuration
- Fixed NPCs spawned from a preset, the preset browser or a respawn never getting a home position.
- Fixed an NPC spawned from the preset browser keeping the home position of the world the preset was
- Fixed NPCs being drawn as a white silhouette with a shadow in the configuration, skin and preset
- Fixed the server crashing when an NPC with a "Tempt" objective ticked its goals.
- Fixed a single or boss spawner spawning without any limit when its preset carried no stored NPC.
- Fixed the "Legacy Easy NPC Data" warning appearing for newly created NPCs.
- Fixed missing transparency corrections for old 64x32 skins, which showed layer artifacts.
- Fixed the player skin screen freezing for a moment while a player name was looked up.
- Fixed the "Reset look at ..." objective label, which read "Reset loot at ..." in some languages.
- Fixed the "No Gravity" attribute being ignored after a preset import, which let NPCs fall.
- Fixed the Fabric game tests, which crashed on start because of the development helper mods.
- Fixed NPCs losing their owner when they were spawned again after a despawn.
- Fixed objectives being deleted from an NPC when the mod providing them was missing at start.
- Fixed importing a preset without a stored id, which spawned an NPC without owner and home.
- Fixed "Follow owner" and "Look at owner" keeping their old target after the owner was changed.
- Fixed attack targets staying assigned to an NPC after the targeted entity was gone.
- Fixed the "Look at Item" objective, which could be stored but never did anything.
- Fixed walking animation for Doppler NPC and 3rd party models.
- Fixed Forge never running its server start-up step, which left NPC tracking, factions and the
- Fixed Forge development runs starting without any mixins, which disabled the vanilla entity
- Changed the movement objectives to a fixed order: flee, follow, return home, then stroll. NPCs
- Changed inserting a preset into a vanilla monster spawner to keep its delay, count and range.
- Changed "Follow owner" and "Look at owner" without a chosen target to follow the owner of the NPC.
- Changed datapack presets to
easy_npc/preset/, the old folder still works, but only for easy_npc. - Changed the preset browser to always list its entries in the same order.
- Removed the experimental user-defined NPCs; the extra config file is no longer read or created.
- Removed the unused
SERVER_SKINskin type. - Added a new game test structure to support game tests in 1.21.11 and higher.
- Added a reload button to each entry of the player skin screen, to fetch a single skin again.
- Added the reason to the log whenever an NPC is removed, so an unexpected despawn can be traced.
- Added suggestions to
/easy_npc render set species. - Added support for presets from other mods, which no longer have to use the
easy_npcnamespace. - Added a preset visibility that hides a preset from the preset browser and the NPC screens.
- Added a teleport distance and a resting spot offset to the follow objectives.
- Added item tags, a "can be scared" option and a "only without owner" option to "Follow item".
- Added an item field to the look objectives, so an NPC can watch a chosen dropped item.
- Added an identifier per NPC, so a mod can find its own NPCs again.
- Added an option to spawn an NPC again when its owner logs in.
- Added game tests for NeoForge, which had none, and restored the spawn egg, dialog screen, data
- Added game tests for every configuration and editor screen, covering all three mod loaders.
- Added game tests for the home position, covering the spawn default, the stored value and
- Improved the model name parsing, which mistook a species ending in "_shiny" for a variant.
- Improved following of flying NPCs, which now steer directly when there is no path through the air.
- Improved third party support with an API for presets, own objectives and objective configuration.
### 7.4.0
- Fixed #807 by no longer pulling every same-type NPC within 32 blocks into a "Defend Self" fight.
- Fixed #805 by evaluating all visibility settings together instead of stopping at the first one.
- Fixed #804 by keeping the custom name on Doppler NPCs for name based textures and the name tag.
- Fixed #803 by adjusting assets to match typical Minecraft style instead of generic UI style.
- Fixed the day and night detection, which counted sunrise as night and sunset as day.
- Fixed the visibility in the Nether and the End, which used the Overworld time.
- Fixed the time and game mode visibility checkboxes appearing in a random order.
- Fixed game tests only being able to fail on their first assertion, which hid later failures.
- Fixed the "Saddled" horse skin variants, which never showed a saddle.
- Changed "Visible to Owner" and "Visible to Team" to also follow day, night and game mode.
- Changed Evoker, Illusioner and Vindicator variants without "Crossed Arms" to keep their arms down.
- Added a "Defend Faction" objective that attacks whoever hurt a nearby faction member or player.
- Added a system message when faction members fight each other and the faction stays out of it.
- Added a head equipment slot for Illagers so their captain banner can be removed or swapped.
- Added a day and night preview to the display configuration screen.
- Added unit and game tests for the visibility attributes and the faction defense.
- Improved the visibility check performance by reading the display attributes only once per check.
- Improved display attributes from older versions by completing them with their defaults.
- Improved the attack objective screen by disabling "Protect Owner" and "Defend Faction" when unset.
### 7.3.0
- Improved skin variants by carrying their data as typed fields instead of parsing variant names.
- Centralized the Cobblemon mod id and default model on shared constants.
- Reduced duplicated enum code with a shared
EnumUtilshelper forget(String)lookups. - Optimized villager profession and type lookups to use direct registry keys instead of scans.
- Optimized enum name lookups by caching tag names, ids and keys once at construction.
- Added unit and game tests for skin variants, villager resolution and the enum helper.
### 7.1.2
- Fixed #801 by using combination for NPC, Dialog and Action UUIDs to avoid collisions for action
### 7.1.1
- Fixed #800 by lazy loading entity types.
- Fixed #799 by fixing edge cases and adding additional documentation and better log messages.
- Fixed #798 by considering console, commands and command blocks as trusted command sources.
- Fixed a critical single-player / LAN issue where client and server NPCs shared the same registry.
- Fixed a memory leak in the configuration menu handling and added timeout and disconnect cleanup.
- Fixed duplicate downloads when several NPCs request the same skin at the same time.
- Fixed skin lookups failing after a error so a slow server no longer freezes the game.
- Fixed the URL skin screen freezing the game while checking a remote image; the check now runs in
- Added a new World Spawner block that limits an NPC preset across the whole world (all dimensions),
- Hardened remote skin downloads with a strict size limit and safe redirect handling to prevent
blockPrivateAddresses setting.- Improved server performance by only sending entity and player load events to NPCs that actually
### 7.0.0
- Fixed #794 by using the expected type for NPC rendering.
- Fixed scaling screen preview by pinning the entity feet to the 0 line of the scale ruler, so NPCs
box updates.
- Fixed #791 by adding Wandering Trader NPC type.
- Fixed #788 by extending the AI safeguards to Epic Fight and raw NPC variants (Piglin, Villager,
- Fixed #787, #531, #237 and #184 by adding a faction system with
/easy_npc factioncommands,
- Fixed #787, #771 and #572 by adding a new
targetobjectives tab to attack hostile factions or
- Fixed #786 by adding gender and shiny model variants for Cobblemon NPCs, searchable via
female
shiny in the model selection.- Fixed faction combat between invulnerable NPCs by adding the new
Attackable by Factionscombat
- Fixed Cobblemon model selection previews for oversized species by scaling with Cobblemon's own
- Fixed faction management edge cases by validating faction names, sorting faction lists and
- Fixed custom skin reloads by loading and clearing texture caches per skin model instead of always
- Improved the
Attackable by Players/Monsters/Factionscombat attributes to work independently of
Invulnerable, each opening a targeted hole for its own attacker group.- Improved preset command and network handling by splitting the large handlers into smaller focused
- Added Easy Model Entities Support.
- Added faction manager and faction editor screens to create, color and delete factions and manage
FACTION_MANAGEMENT security feature.- Added new
Miscattributes tab as home for the NPC faction assignment. - Added reusable warning and help icon components for inline hints with tooltips.
- Added additional unit and game tests for factions, target objectives and Cobblemon model variants.
### 6.25.0
- Fixed #782, #636, #622 by preserving data components during validations.
- Fixed #780 by caching remote texture downloads and reducing duplicate registrations.
- Fixed #767 by clamping attribute sliders against extreme values from other mods.
- Fixed #754 by adding custom data item matching for NPCs with actions and conditions.
- Fixed texture manager running in the wrong thread may cause crashes and deadlocks in >= 1.21.x.
- Fixed empty UUID handling for action conditions.
- Fixed execution limit reset for actions.
- Added texture registration queue to avoid multiple simultaneous downloads in the same tick.
- Added NPC coin, key and red token as consumable items for NPCs with actions and conditions.
- Added
Welcome Coin Traderas example NPC preset with custom coin, key and red token item data. - Added attribute safeguards against extreme values from other mods.
- Increased fallback max health value from 1024 to 4096 for high-health NPCs.
- Improved texture manager by reducing duplicate texture checks and registrations.
### 6.24.0
- Fixed #459, #775 by adding an option to block interactions with invisible NPCs.
- Fixed #774 startup crash related to optional Epic Fight and Cobblemon entity type maps.
- Fixed #773 by checking timed trade resets during base ticks and before opening trade screens.
- Fixed trade reset timing by increasing internal tickers correctly.
- Added time of day and weather conditions for #459.
- Added additional unit and game tests for trade resets, ticker handling and entity attributes.
- Added
Skywatch Scoutas example NPC preset with time of day and weather conditions.
### 6.23.0
- Fixed #774 by migrating isSunBurnTick error to 26.x.
- Fixed #772 by adjusting texture retries with 403 and 404 errors and lowering logging.
- Fixed #770 item rendering for Epic Fight NPCs (Evoker, Pillager, Vindicator and humanoid skins).
- Fixed #769 door loops with NPCs not reliably opening or closing doors.
- Fixed #760 by adding a dialog option and config setting (buttonConditionMode: LOCK or HIDE) to
- Fixed #709 by adding color picker popup for names with 32 colors and/or a manual RGB/hex value.
- Fixed NPC name color being reset when renaming without a specified color by preserving the
- Improved the door movement attributes so "Pass Door" is automatically enabled while "Open Door"
### 6.22.0
- Fixed #766 by passing the full server player context to command execution for better compatibility
- Fixed #764 by adding entity health, npc health conditions and NPC preset
Grukk, the Sparring Post as example for using these conditions.- Fixed #763 by making sure dialog button execution limits are now recorded.
- Fixed #758 by providing a example NPC preset named
One Wish Companion. - Fixed crashes related to 3rd party villager AI reading non-registered brain memories on Easy NPC
- Fixed Dialog buttons are not locked for server-side data as preparation for #760 and #644.
- Fixed #628 by adding conditional dialog opening support / command for better control over when
- Added brain AI for Piglin and Piglin Brute NPCs and registered the full vanilla brain memory set.
- Added additional guns to the gun tag for #757.
- Added a new "Open Dialog (Conditional)" action that opens a named dialog only if its conditions
- Added new entity health and npc health conditions for actions, dialogs and dialogs buttons.
- Added Piglin, Piglin Brute and Zombified Piglin NPCs invulnerable, for consistency with other
- Added a new "Knockback Immunity" combat attribute that prevents the NPC from being knocked back by
- Added a new "Explosion Immunity" combat attribute that makes the NPC immune to explosion damage
- Moved the "Projectile Collision" attribute to the Combat attribute screen, where it fits better
### 6.21.0
- Fixed item attachment for Illagers in crossed-arms pose.
- Fixed broken illager crossbow attack goal.
- Fixed crashes related to 3rd party items which are not renderable as hand items #756.
- Fixed crashes related to 3rd party mixins trying to access non-existing model parts #756.
- Fixed log.info spam message by reducing log verbosity and adding additional checks for custom
- Improved EasyNPCModelManager performance.
- Refactored NPC renderers to remove default hand item layer.
### 6.20.0
- Fixed crashes related to 3rd mods trying to access non-existing NPCs goals.
### 6.19.0
Note: This update adjusted the dialog background images by 10x6 pixels, which may require users to
adjust their custom dialog backgrounds if they are using custom ones.
- Fixed #752, #130 by adding dialog button condition support to allow to disable buttons.
- Fixed #683, #215 by adding typewriter effect support for dialog text.
- Fixed #690, #309 by allowing conditions for dialog, dialog buttons and interactions.
- Fixed smaller UI issues with dialog screen layout and background.
- Refactored dialog background images by 10x6 pixels on each side.
- Refactored dialog screen layout to better fit the new background size and improve appearance.
- Added typewriter effect and client configuration for dialog text.
- Added condition symbols to indicate the condition status for dialog, buttons and interactions.
- Added amount field for item conditions to allow checking for specific amounts of items.
- Added
Threshold Wardenas example NPC preset with various conditions and actions. - Added smaller bug fixes and optimizations related to dialog conditions and button states.
### 6.18.0
Note: This update changes the internal data format for conditions and actions, which may reset /
remove legacy existing execution-limit entries without stored IDs.
- Fixed #745 by adding conditions for actions to allow more complex and dynamic behavior.
- Fixed #652 by adding dialog button tooltip for longer texts.
- Fixed #687 by adding command value tooltip to show the full value.
- Added Experience Level conditions.
- Added Game-mode conditions.
- Added has item in inventory condition.
- Added has item in hand condition with (main hand and off-hand) support.
- Added player health condition.
- Added player tag condition.
- Added player team condition.
- Added Goldmere example NPC preset with various conditions and actions.
- Added negative condition support to allow negating conditions for more complex logic.
- Removed parameter pseudo IDs for
ActionDataEntryand replaced them with random UUIDs. - Refactored condition system to allow more condition types.
### 6.17.0
- Fixed #738 by adding additional tooltips for "Execute as player"
- Fixed to detailed logs by reducing log.info messages during startup and in-game.
- Added additional unit and game-tests.
### 6.16.0
- Fixed #732 by providing option to disable ESC key and close button for dialogs.
- Fixed #723 by avoid auto-close in specific cases like trading screens.
- Added general dialog configuration options to allow users to customize dialog behavior.
- Added avatar scaling and position offset options for dialogs.
- Added missing translation keys.
### 6.15.1
- Fixed #735 by extending the correct base class.
- Fixed several 26.1.2 specific issues from manual spawn testing.
### 6.15.0 (Trades, Player Heads, Epic Fight and QOL updates)
- Fixed #731 by resyncing species data, if species list is empty on the client.
- Fixed #730 by improving Epic Fight integration and enabled experimental features.
- Fixed #729 by making sure trade uses are stored correctly.
- Fixed #728 by adding custom head support for player heads.
- Fixed #689 by showing remaining trade uses and allow resetting manually and automatically.
- Fixed #218 and #132 with new trade configuration screen and better support for custom trades.
- Fixed trade specific edge by switching between basic and normal/advanced trading mode.
- Fixed dialog button text is truncated with tooltip showing the full text.
- Fixed Cobblemon animation issues by syncing animation state with Cobblemon Animation System.
- Added per trade specific actions to allow users triggering actions after buys.
- Added trade reset button to reset all trades easily.
- Added trade usage information to trade configuration screen.
- Added experimental feature state to allow users to manually enable experimental features.
- Added Griselda Grindstone as example trader with actions.
- Cleanup test files.
### 6.14.0
- Fixed #727 by making sure changes are synced to the client when changing values.
- Fixed #726 by adding additional allow lists for specific commands.
- Fixed #686, #389, #304, #211 by adding basic Cobblemon support with Cobblemon NPC.
- Fixed dialog misalignment and navigation issues by adjusting dialog sprites and screens.
- Fixed x and z root rotation by correcting rotation logic and pivot calculations.
- Added basic Cobblemon support with custom NPC type and model for testing.
### 6.13.0 (Security and Permissions Updates)
Notes: This update includes better security checks and permissions for multiplayer environments. It
allows to execute server commands which can be potentially dangerous if used with malicious intent.
- The update splits the model root data and logic from the rest of the model part data and logic,
- Fixed #725 by separating model root data and logic from the rest of the model part data and logic.
- Fixed #722 by supporting .sbnt files as local presets.
- Fixed #675 by adding dedicated assets for dialog and config screen backgrounds.
- Fixed #605, #532, #529 with new security checks and permissions system.
- Fixed #469, #311 by adding experimental api documentation and examples for custom model support.
- Fixed double rendering of config screen background by removing redundant background rendering.
- Fixed Ghast and Slime hitbox and name tag position issues by adjusting bounding box.
- ⚠️ Added security checks to prevent potential exploits and allow safe usage in multiplayer
- Replaced dynamic dialog screen background with a static one for better performance, customization
- Replaced dynamic config screen background with a static one for better performance.
- Refactored config-ui specific components and removed them from the core mod.
- Removed duplicated sprite sheets.
- Prepare permission system for possible Luck Perms integration in the future like #712.
- General code cleanup and optimizations related to config screen rendering and assets.
### 6.12.0
- Fixed #714 by adding additional checks for custom model part list based on vanilla models.
- Fixed #713 by reducing log verbosity with downgraded per-NPC INFO messages to DEBUG and
- Fixed #711 by reduced oversized startup/config log output.
- Fixed NBT validation guard to prevent unnecessary buffer allocations in production.
- Added model part name constants to EasyNPCModelManager for consistent usage across mixins.
- Improved RenderEntityTypeSupportConfig by enhancing filter logic and optimizing data structures
- Removed verbose debug logs that dump large data structures.
### 6.11.1
- Fixed #710 by improving backward-compatible parsing for recoverable trade data.
### 6.11.0
- Fixed #703 rendering issue with new custom layer system and hand renderings.
- Fixed #701 by adding additional safeguards and logging for invalid trading offers.
- Fixed smart animation not working properly with modified head position.
- Fixed head tracking by moving player detection back to server side-only.
- Fixed CustomLookAtPlayerGoal to better handle edge cases and reduce jitter.
- Fixed issue with Doppler NPCs keeping their hand inventory.
- Improved PoseManager logging message.
- Updated logo with a new design.
### 6.10.0
- Fixed #698 by adding try and catch for 3rd party entity creation.
- Fixed #695 by clearing model part rotations/positions when switching to a
DEFAULTvanilla pose. - Fixed #695 by applying lock rotation and pose animation only when the NPC is idle.
- Fixed #695 by correcting root rotation pivot to use actual bounding box height instead of 0.5f.
- Fixed multiple objective registration issues including inverted
isTargetedPlayercheck, wrong
targets.
- Fixed goal reference being retained after objective is unregistered.
- Removed auto-lock of ROOT rotation when loading poses; root lock is now user-controlled.
- Added lock rotation checkbox to the advanced and custom pose configuration screens.
- Added model-specific pose key filtering in
ConfigurationMenuHandlerfor the default pose screen. - Added unit tests for
CustomPosition,CustomRotation,CustomScale,ModelPose,
ModelAnimationBehavior and ModelAnimationData.- Added
NPCDataIsolationTestHelperand game tests for Fabric and Forge. - Increased max head yaw range from 60° to 65°.
### 6.9.0
- Fixed #692, #666 by adding caching and safeguards to prevent redundant retriggering of NPC entity
- Fixed #651, #617 by adding basic custom poses for all supported NPC types.
- Fixed #597 by adding additional Flee goals for fleeing from players, villagers, monsters, ...
- Fixed pose loading to read directly from mod resources instead of copying files to disk.
- Fixed duplicate
saveNPCcalls on entity join by checking existing registry entry first. - Added
despawnandspawncommands to remove and re-spawn NPCs by UUID with configurable removal
- Added
ModelPoseAPIandEasyNPCEntityHandlerpublic API classes for controlling NPC poses and
- Added pose data files for all supported NPC types.
- Added lock rotation checkbox to the basic pose configuration screen.
- Added
MoveToPositionGoalto move an NPC to a position before executing a callback action. - Added
EasyNPCLookControlandEasyNPCBodyRotationControlto respect locked root rotation. - Added synced owner change and dimension change to the NPC entity data index.
- Added EasyNPCItemAttachmentLayer into various entity renderers.
- Added dedicated
Flee Objectiveconfiguration tab with objectives for fleeing creepers, monsters,
- Added
FOLLOW_ITEMobjective to the follow objectives tab to make NPCs follow item entities by
minecraft:apple).- Added
LookAtEntityByUUIDGoaland enabled the look-at-entity-by-UUID and look-at-owner objectives
- Added
persistentflag toSynchedDataIndexso that transient indices (e.g. crossbow charge,
- Added configurable
customParticlesEnabledflag toSlimeBasefor API consumers. - Added
SoundType.PETand mappedCAT_PURRto the cat NPC for tamed ambient sound variety. - Reduced log verbosity for periodic NPC save operations from INFO to DEBUG.
### 6.8.3
- Fixed #680 by enforcing version miss-match by upgrading network protocol version.
- Fixed #679 by resetting position, rotation and size for name tag.
- Fixed #665 by adding multi state slide for root rotations.
- Fixed #664 by adding option to disable following mouse cursor for easier posing.
- Fixed #663 by improve support for X and Z root rotations.
- Fixed #661 by adding quick rotation with NPC wand and sneaking to the NPC to rotate the root to
- Fixed move tool is wrongly triggering interactions by adding check for move tool in interaction
- Fixed Preset Item is wrongly triggering interactions by adding check for preset item in
- Fixed Slime and Ghast hitbox and name tag position issues by adjusting bounding box and eye height
- Fixed Slime and Ghast GUI position by adjusting offset values.
### 6.8.2
- Fixed #677 by extending
SafeMerchantDatawith notifyTrade to avoid crashes. - Added progression data support for leveling up NPCs based on player interactions and actions.
- Added global NPC tracking system for better management and debugging of NPCs across the world.
- Added
OriginalModelConfig.withVariantTexture()option to allow using variant textures with the
### 6.8.1
- Fixed #676 by using existing preset helper method instead of custom one.
### 6.8.0 (Adding API support)
- Fixed #667 by adding warning messages and additional checks for invalid network packets.
- Fixed Horse spawn eggs model.
- Fixed pose support for allay, chicken, creeper, fox, ghast, horse, illager, iron golem, slime and
- Added NPC base classes for better API support.
- Added NPC raw classes for advanced API support.
- Added Slim and Ghast NPC types.
- Added Custom Model API for easier integration with other mods and custom models.
- Refactored internal data handling and registration for better maintainability and future
### 6.7.1
- Fixed #657 and #656 by adding additional client side checks for vanilla bug.
### 6.7.0
- Fixed #650 by implementing Wolf Leg Animations in setupAnim method.
- Fixed #648 by fixing canBeHitByProjectiles translation.
- Fixed #645 by adding
allowBypassInvulnerabilityconfig option to allow/deny bypassing
- Fixed delete button showing label even with small width.
- Fixed up and down buttons not positioned correctly in some cases.
- Fixed name tag showing up for dialog and configuration UI.
- Fixed distance action issue were multiple actions are not properly triggered.
- Fixed issues with NPC presets.
- Fixed Cat NPC and Wolf NPC owner data not syncing properly.
- Added preset browser for easier selection of common NPC presets.
- Added preset .snbt (text) export and import functionality for sharing NPC presets.
- Refactored existing NPC presets to use new .snbt format.
- Refactored spawner system to use new preset format for better maintainability and future
### 6.6.2
- Fixed #643 by rework scaling system.
- Fixed scaling not properly updating hitbox and nametag position after restart / reload.
- Added MID and MOUSE_OVER name tag visibility modes for finer control over NPC name display.
- Added team-based name tag visibility support respecting vanilla Team.
### 6.6.1
- Fixed #638 by refactored internal data handling for display attributes.
### 6.6.0
- Fixed #634 by implementing asynchronous texture loading with dedicated thread pool.
- Fixed texture loading blocking render thread causing game freezes.
- Fixed race conditions in texture reload protection using atomic operations.
- Fixed resource leaks in HTTP connections during remote texture downloads.
- Fixed URL validation spam allowing multiple simultaneous downloads of the same texture.
- Fixed exception handling for remote image validation preventing crashes on invalid URLs.
- Fixed
defineId called for:warning messages during NPC loading. - Refactored texture loading architecture with multi-level defense and rate limiting.
- Refactored entity data registration logic for better maintainability.
- Converted data classes to modern Java records for better immutability and thread-safety.
- Added thread-safe session server spam protection with ConcurrentHashMap.
- Added comprehensive error recovery with automatic cooldown reset on failures.
- Improved texture loading with 2-thread pool and 500ms rate limiting.
- Improved exception handling with specific catch blocks for IIOException and FileNotFoundException.
### 6.5.2
- Fixed Villager profession and job skin issue.
- Improved GitHub workflows by adding cache for gradle dependencies.
- Improved Gradle build time and cleanup tasks.
### 6.5.1
- Fixed #632 by implementing ON_KILL action type and event.
- Fixed #629 by improving texture handling performance, caching, and memory usage.
- Fixed kill command is not working on NPCs.
- Fixed texture reload protection preventing cache reload after eviction.
- Fixed WebP validation bug in remote image validator (missing return statement).
- Refactored texture handling logic for better maintainability and future improvements.
- Added time-based reload protection (60 seconds) to replace permanent blocking mechanism.
- Added missing variant textures for chicken, pig and wolf.
- Added additional unit tests for texture handling.
- Improved gradle build tasks.
### 6.5.0
- ⚠️ Removed jar-in-jar bundle approach for better mod compatibility and api capabilities.
- Fixed #627 scissor implementation for better compatibility with other mods.
- Fixed #625 lively animation issues when using rotated or moved model parts.
- Fixed default animation are canceled when using scaled model parts.
- Added better pose animation control with smart, default und none options.
### 6.4.1
- Fixed #626 screen switching logic for different NPC UUIDs, thanks to
Spawnbladefor the detailed
### 6.4.0
- Fixed #626 by improving dialog data validation and error handling.
- Fixed #623 by refactoring render data and render handling.
- Fixed #622 by making sure custom data are properly saved and loaded.
- Fixed open dialog action type to allow opening dialogs from other NPCs.
- Fixed hashing issues by adding missing equals and hashCode methods for ConditionDataSet and
- Added custom data test item for #622 and easier testing of custom data.
- Improved records and fixed potential issues with missing data.
### 6.3.0
- Refactored config ui specific components and removed them from the core mod.
- Fixed dialog data by filtering dialog data before sending to the client.
- Fixed dialog editor layout issues and improved usability.
- Fixed missing default values for some dialog data fields.
- Added dialog priority support to control the order of dialog execution.
- Added condition support for dialog and scoreboard actions.
- Added frequency support for dialog to limit how often an dialog can be shown.
- Added new NPC preset to for scoreboard and condition support.
- Improved dialog button data format by removing redundant fields.
### 6.2.0
- Fixed legacy custom name parsing.
- Fixed string injection within dialogs.
- Fixed missing translation for action types.
- Added scoreboard action type to increase, decrease, set scoreboard values.
- Added
@score(...)NPC macro to display scoreboard values in the dialog. - Added additional unit tests.
- Improved spin button with indicators and better usability.
### 6.1.2
- Fixed container and menu sync issues with missing close container packets.
- Fixed close button not working in some cases.
- Fixed jumping mouse cursor between screen transitions.
- Fixed translation files and removed duplicate and deprecated entries.
- Moved Easy NPC wand to existing core item tab instead of creating a new one.
- Added cat pose support for different model parts (except tail).
- Improved EasyNPCWand glowing effect performance by disabling it when not needed.
- Improved custom entity detection by excluding non-living entities like displays, makers, throwns
- Improved cat variant handling.
### 6.1.1
- Fixed #615 by checking if item is equipped in one of the hands.
- Fixed #612 by re-validating entity types.
- Fixed #610 by force sync of hat and head layers for specific models.
- Fixed orc textures.
- Fixed cat variant handling for 1.21.5.
- Fixed player render by adjusting render state
skinfield. - Fixed cat renderer by adjusting render state
texturefield. - Fixed position, scaling and rotation preview.
- Fixed Fairy model.
- Improved custom model support and performance, by moving related logic into to client side only.
- Improved caching of player to UUID mappings for player skins.
- Limited change model commands and logic to Doppler NPCs only.
- Added renderEntityRaw method to render NPC as-it-is.
### 6.1.0 ✨
This is a major release. Please back up your worlds and NPC data before updating. This version
contains many improvements, optimizations, and internal changes that are **not fully compatible**
with earlier releases.
⚠️ Breaking changes
- Existing NPCs and their configuration data from versions before 6.1.0 may not load correctly or
- Internal data formats and some behaviors have been refactored to support new use-cases.
🧩 New modular structure
Easy NPC is now split into three separate mods:
- Easy NPC** – Bundle that includes both Core and Configuration UI for a plug‑and‑play experience.
- Easy NPC: Core** – Lightweight runtime and logic for NPCs, with minimal dependencies. Intended
- Easy NPC: Configuration UI** – Standalone configuration interface for creating and editing NPCs.
🎯 Why this change?
- Allows servers and modpacks to ship only the **Core** mod on the server side for a leaner setup.
- Reduces memory usage and load times when the UI is not required everywhere.
- Makes development and testing faster by separating UI and core logic.
[history]: https://github.com/MarkusBordihn/BOs-Easy-NPC/commits/
[upgrade_guide]: https://github.com/MarkusBordihn/BOs-Easy-NPC/wiki/Upgrading
## Note
This change log includes the summarized changes. For the full changelog, please go to
the [GitHub History][history] instead.
Note: Please always back up your world / NPCs before updating to a new version!
Check the [upgrade guide][upgrade_guide] for more information.
### 7.15.0
- Fixed #838 by keeping preset imports silent when run through
/executeor command blocks. - Fixed #380 by applying the NPC limit to the default spawner as well.
- Fixed #849 by allowing resource pack sounds in the sound configuration.
- Fixed #349 by no longer spawning NPCs left-handed at random.
- Fixed #851 by locking dialog buttons per dialog, not across dialogs with the same label.
- Fixed deleted or duplicated NPCs returning, memory leaks and several owner and UI issues.
- Fixed the Epic Fight Wither Skeleton NPC missing its Epic Fight mob patch.
- Fixed off-center inventory screens and their close button overlapping the "Custom" trading tab.
- Fixed scaled Doppler NPCs keeping the full hitbox of the mimicked entity.
- Fixed NPCs on a player's shoulder ignoring their scale and the Doppler's mimicked model.
- Changed requirements: same mod version on client and server, Easy Model Entities 2.5.0+.
- Changed backups of all worlds and killed NPC data to expire after 30 days, see
storage.cfg. - Added "Jump", "Assist Owner" and "Follow Nearest Player" to fix #845, fix #310, fix #761.
- Added an NPC inventory with item pickup and death drops to fix #111, fix #197, fix #543, fix #670.
- Added "Sit on Shoulder", a boss bar and
/easy_npc debug core loglevelto fix #577, fix #219. - Added the "Hold" animation mode, a "Bank Teller" preset and new API methods for addons.
### 7.14.0
- Fixed #846 by keeping custom poses for players who start seeing the NPC later.
- Fixed attribute and trading settings missing for players who start seeing the NPC later.
- Fixed changed max uses, XP and trading type not shown in the trading screens until reload.
- Fixed
/easy_npc sound setchanges not reaching players until the NPC was reloaded. - Added game tests that check NPC poses and settings after respawns and for new players.
### 7.13.0
- Fixed color and formatting tags in dialog button names showing as plain text.
- Fixed the button preview in the editor showing lowercase names as a raw translation key.
- Fixed the "Move EasyNPC" item not working for NPC owners outside of creative mode.
- Fixed
/easy_npc owner setreporting success even when the owner could not be changed. - Fixed the game crashing when the URL or player skin screen showed a skin download error.
- Fixed the preset browser search showing no results after scrolling down the list.
- Changed the network protocol version, so client and server must run the same mod version.
- Added
@initiator,@npcand@score()support to dialog button names to fix #841. - Added automatic client tests with the Client Runtime Interface Toolkit.
- Larger core refactoring and code cleanup.
### 7.12.2
- Fixed the Fairy hitbox being far too small, so its name tag and speech bubble sat in its body.
- Fixed scaled NPCs keeping their old hitbox and eye level, so hits, clicks and looking missed.
- Fixed oversized names, lists and NPC data in network packets being read without any limit.
- Fixed invalid NPC positions, scales, attributes, names and durations from being applied.
- Changed Fairy NPCs to take up the space of their model, so they collide and can be clicked.
- Changed Skeleton, Stray and Bogged NPCs to the vanilla hitbox height, they were slightly short.
- Changed the network protocol version, so client and server must run the same mod version.
### 7.12.1
- Fixed #836 by always showing "Restore", including datapack presets, with a reason tooltip.
- Fixed preset import and export messages missing, wrong or not warning about replaced NPCs.
- Fixed the preset browser reloading on each keystroke, leaking NPCs and clearing the selection.
- Fixed selection box drop-down lists being covered by the checkboxes and labels behind them.
- Fixed the preset list sorting, filter order and layout clipping options in small windows.
- Fixed
/easy_npc preset import datawithout a position importing it as a default preset. - Fixed spawn rate limit leaks, unstable preset IDs and "Spawn New" stacking NPCs on one spot.
- Changed "Restore" to refuse instead of spawning a copy when it is not permitted.
- Added sorting, a match count, reload, auto-close, the NPC ID and tooltips for presets and skins.
- Added
matching <pattern>batch imports with limits, a confirmation and a clickable position.
### 7.12.0
- Fixed #833 by showing Easy NPC Wand outlines only to the wand holder, owner and admins.
- Fixed #834 by adding "Set Home Here" and "Reset Home" buttons to the position configuration.
- Fixed #835 by keeping the NPC ID and position in exported presets, so imports restore the same
- Fixed preset imports and spawn eggs losing the owner's list entry and owner objectives.
- Fixed NPCs restored from an automatic backup losing their owner and becoming ownerless.
- Fixed selection lists showing only their first six entries and hiding the rest.
- Changed importing a preset to update the original NPC at its stored position instead of adding a
- Changed completed trades to play the "Trade completed" sound, which stayed silent before.
- Changed the API dialog call to report an unknown dialog label instead of always reporting success.
- Changed NPCs without arms to carry held items at the head or body instead of hiding them.
- Changed the optional Easy Model Entities dependency to require version 2.4.0 or newer.
- Added a "Sound" configuration with sounds for dialogs, speech, swimming, eating and fall damage.
- Added a searchable sound selection with volume and pitch sliders to the "Sound" configuration.
- Added a "Block Vehicles" option to keep NPCs out of boats, minecarts and modded chairs.
- Added the profession selection to all skin configurations and a new built-in skin per NPC type.
- Added client settings to hide name tags behind walls and
highlightEnabledfor wand outlines. - Added an "Exists" condition operation and API access to NPC movement, actions and presets.
### 7.11.0
- Fixed #828 by no longer freezing the server on logout when NPCs follow or watch the player.
- Fixed #831 by moving routine NPC removal messages to the debug log.
- Fixed #832 by making humanoid NPCs ignore custom player models, animations and poses.
- Fixed hourly NPC backups stuttering on large worlds and retaining timestamps of removed NPCs.
- Fixed hourly NPC backups losing the identity, owner and position of the backed-up NPC.
- Fixed owner-login restoration duplicating, repeatedly restoring, reviving or moving unloaded NPCs.
- Fixed NPC index and file synchronization issues causing lost NPCs, crashes or false warnings.
- Fixed stale NPC data after unloading, avoided redundant writes and added repeated-unload warnings.
- Fixed the preset browser failing to list custom and world presets saved in the SNBT format.
- Fixed speech bubbles losing their text and turning translucent with Iris shaders.
- Fixed the "Opacity" of an NPC being ignored while a shader pack is active.
- Fixed text formatting and macro parsing for translated speech bubbles and mod API texts.
- Fixed speech bubbles and their text staying hidden behind blocks while a shader pack is active.
- Added
minLightLevelto keep speech bubbles readable in dark surroundings.
### 7.10.0
- Fixed #829 by allowing bats and other non-walking mobs as the render entity of a Doppler NPC.
- Fixed the Wandering Trader NPC rendering without its texture.
- Fixed NPCs rendered as a bat, frog or warden showing a static pose instead of their animation.
- Fixed the NPC name tag showing above the previews in the "Custom Models" configuration.
- Fixed speech bubbles being cut off by walls, doorframes and the NPC's own body.
- Fixed the previews in the "Custom Models" configuration.
- Changed the previews in the "Custom Models" configuration to stand on a common ground line.
- Changed overlapping speech bubbles to move apart and to stay visible when the NPC is off-screen.
- Changed "Navigation: Automatic" to use flying movement for NPCs rendered as a flying mob.
- Changed the render entity list to hide seats, paintings, thrown items and other non-mob entities.
- Added a "Min. hover height" slider for flying NPCs and client settings for speech bubbles.
### 7.9.0
- Fixed modded fish NPCs, like the ones of Tide 2, spinning around instead of swimming upright.
- Fixed "Navigation: Automatic" using ground movement for water NPCs and aquatic model NPCs.
- Fixed the "Random Swimming" objective never moving an NPC that uses aquatic navigation.
- Fixed a swimming NPC shaking or twitching in place instead of holding its tilt and swim depth.
- Fixed a swimming NPC turning in circles forever when it could not reach its next path point.
- Fixed an NPC that fell into water never getting out of it again.
- Fixed a following NPC searching a new path every tick while its target was unreachable.
- Fixed the "Move to" actions stopping short of a raised target or not starting while in the air.
- Fixed "Move back to Home" ignoring height differences and never returning from beyond 32 blocks.
- Fixed the "Opacity" input field being too narrow to show a value of 100.
- Fixed a damaged NPC with an Easy Model Entities model never flashing red.
- Changed modded water NPCs to swim level, vanilla water mobs keep their tilt as before.
- Changed the "Move to" actions to walk up to 48 blocks and to teleport only beyond that range.
- Changed "Move to" and "Move back to Home" to give up after three seconds without progress.
- Changed the timeout of a "Move to" action to count real ticks, it ran twice as long before.
- Changed a new "Random Swimming" objective to rank below following, fleeing and attack goals.
- Changed "Opacity" of an NPC with an Easy Model Entities model to be applied by that mod itself.
- Changed the minimum Easy Model Entities version to 2.3.0, older versions disable the integration.
- Added "Depth below surface" and "Height above floor" sliders for the swim level of an NPC.
- Added log entries for the NPC files written on a world save, with a warning above 250 ms each.
### 7.8.1
- Fixed #827 by rendering fish NPCs in water upright instead of always flopping on their side.
- Fixed #828 by keeping a damaged NPC from blocking the world save, it now falls back to defaults.
- Fixed a restored NPC picking up a random preset ID that changed with every save.
- Changed NPC data to only be written to disk when it actually changed.
### 7.8.0
- Fixed smaller text and UI issues.
- Changed an NPC that is already standing at its target position to finish the movement right away.
- Changed the "None" skin tab to "Advanced", which now holds "Disable Skin" and the texture field.
- Changed the minimum Easy Model Entities version to 2.2.0, older versions are no longer accepted.
- Added a "Move to" action, which sends an NPC to a position, a player, its owner or its home.
- Added a "Move to and Wait" action, which runs the following actions only after the arrival.
- Added an arrival radius, a timeout and an optional teleport to both move actions.
- Added an "Opacity" attribute from 0 to 100, which fades body, armor and hand items together.
- Added a "Set Opacity" action, which turns an NPC into a ghost or hides it completely.
- Added the "Lantern Wraith" preset, a ghost walking a square with a short line at every corner.
- Added API access to the move actions and the opacity of an NPC.
- Added a "Resource Location" skin type, which renders any texture of a mod or a resource pack.
- Added an "Advanced" skin tab, which previews the NPC with the entered texture before applying it.
### 7.7.7
- Fixed #821 by keeping the transparency of 64x64 skins, which Fresh Moves needs for its eyes. Skins
- Fixed #818 by running trade actions for Villager and Wandering Trader NPCs as well.
- Fixed a dialog with several text variants switching its speech bubble size every second.
- Fixed the skin cache storing the processed image instead of the original download.
- Fixed the untranslated interval names, like
PER_DAY, of the "Execution Limit" condition. - Fixed the
sitanimation of Easy Model NPCs, which never used the built-in sitting pose. - Fixed the speech bubble being cut off by the head of an NPC when a player stood close to it.
- Changed speech bubbles to keep their screen size and to move down or aside when a player is close.
- Changed the speech bubble text to render 20% larger than a name tag.
- Changed a time based action set with a "Wait" action to run in order instead of picking one entry.
- Changed dialog texts to wrap later, so an existing dialog can switch to the wider screen layout.
- Changed fallback actions to skip screen actions without a player, like the regular actions do.
- Changed the minimum Easy Model Entities version to 2.1.0, older versions disable the integration.
- Added a "Wait" action, which pauses the following actions of an event for a chosen duration.
- Added the "Countdown Timekeeper" preset, a speech bubble count to ten ending in sound and sparks.
- Added scaling and rotation for Doppler NPCs behind the "Experimental Features" checkbox. Both only
- Added a "Sound" action, which plays a sound at the NPC with sound category, volume and pitch.
- Added "Every 5 Minutes" and "Every 15 Minutes" to the "Execution Limit" condition.
- Added a "Player Idle" condition, which checks how long a player has not moved.
- Added an "Immovable" attribute, which keeps an NPC in place against pushing and knockback.
- Added
/easy_npc pauseto pause a single NPC or all NPCs; the global pause ends with the server. - Added API access to the sound action, the pause state and the idle time of a player.
- Added a texture override per model slot for Easy Model NPCs over
/easy_npc render texture. - Added a "Repeat" playback mode with a count and a time limit to the "Play Animation" action.
- Added API access to animation variants, texture slots and textures of Easy Model NPCs.
### 7.6.0
- Fixed unclear mod conflict errors for duplicate entity data tracker IDs.
- Fixed third-party health bars rendering over NPC previews in configuration and dialog screens.
- Fixed Doppler and Easy Model Entities NPCs using default hitboxes instead of their model size.
- Fixed the
/easy_npccommands suggesting no NPC UUIDs at all on a server. - Fixed the pose list of the "Set Pose" action drawing over its input field.
- Fixed the untranslated "Loop", "After current" and "Action Data Type" labels of the action editor.
- Fixed the missing hint text of the "Chance" condition.
- Fixed long condition hints running out of the editor screen instead of wrapping.
- Fixed the misaligned help icons and text buttons of the "Message" action.
- Fixed changes to the "Set Pose", "Play Animation" and "Stop Animation" actions not being saveable.
- Fixed the speech bubble text sitting closer to its upper border than to its lower one.
- Changed the NPC suggestions to list the crosshair NPC first and only own NPCs without permissions.
- Changed a preset export to only store what differs from a new NPC, without position or owner.
- Changed a preset without objectives or actions to fall back to the defaults of its NPC type.
- Changed events without a player, like "On Spawn" or "On Kill", to check their conditions. An
- Changed a time based action to pick the owner as
@initiatorwhenever the owner is nearby. - Changed speech bubbles to stay visible from 5 up to 18 seconds, depending on the text length.
- Changed the "Set Pose" action to only show its input field for the "custom" pose entry.
- Added time based actions on five fixed steps, from every ~1 second up to every ~15 minutes.
- Added a "Message" action for chat, system message and speech bubble text without a command.
- Added text variants, a sender name, a recipient and translation keys to the "Message" action.
- Added the speech bubble graphic as
easy_npc:textures/gui/speech_bubble.pngfor resource packs. - Added a "Chance" condition in percent and a "Relationship" condition for owner and faction.
- Added spawn, owner login, state change, day / night, weather and the missing "On Trade" events.
- Added a base preset per NPC type under
easy_npc:api/preset/base/, usable as a parent preset. - Added the "Wandering Companion" preset, a talkative NPC built from time based messages.
- Added an action registry, an action handler, a preset validator and richer event data for mods.
- Added a tooltip with name, type and distance to every NPC suggestion of the
/easy_npccommands. - Improved the NPC suggestions, which appear without typing and tolerate a near miss of one block.
### 7.5.0
- Fixed #814 by giving every Cobblemon NPC its own animation state instead of one per species.
- Fixed #813 by letting "Move back to Home" work at any distance instead of only near its home.
- Fixed #812 by checking once per session whether a player changed their skin.
- Fixed #810 by accepting Cobblemon aspects of resource packs instead of only "shiny" and "female".
- Fixed the home position of an NPC always reading as unset, which hid "Home" in the configuration
- Fixed NPCs spawned from a preset, the preset browser or a respawn never getting a home position.
- Fixed an NPC spawned from the preset browser keeping the home position of the world the preset was
- Fixed NPCs being drawn as a white silhouette with a shadow in the configuration, skin and preset
- Fixed the server crashing when an NPC with a "Tempt" objective ticked its goals.
- Fixed a single or boss spawner spawning without any limit when its preset carried no stored NPC.
- Fixed the "Legacy Easy NPC Data" warning appearing for newly created NPCs.
- Fixed missing transparency corrections for old 64x32 skins, which showed layer artifacts.
- Fixed the player skin screen freezing for a moment while a player name was looked up.
- Fixed the "Reset look at ..." objective label, which read "Reset loot at ..." in some languages.
- Fixed the "No Gravity" attribute being ignored after a preset import, which let NPCs fall.
- Fixed the Fabric game tests, which crashed on start because of the development helper mods.
- Fixed NPCs losing their owner when they were spawned again after a despawn.
- Fixed objectives being deleted from an NPC when the mod providing them was missing at start.
- Fixed importing a preset without a stored id, which spawned an NPC without owner and home.
- Fixed "Follow owner" and "Look at owner" keeping their old target after the owner was changed.
- Fixed attack targets staying assigned to an NPC after the targeted entity was gone.
- Fixed the "Look at Item" objective, which could be stored but never did anything.
- Fixed walking animation for Doppler NPC and 3rd party models.
- Fixed Forge never running its server start-up step, which left NPC tracking, factions and the
- Fixed Forge development runs starting without any mixins, which disabled the vanilla entity
- Changed the movement objectives to a fixed order: flee, follow, return home, then stroll. NPCs
- Changed inserting a preset into a vanilla monster spawner to keep its delay, count and range.
- Changed "Follow owner" and "Look at owner" without a chosen target to follow the owner of the NPC.
- Changed datapack presets to
easy_npc/preset/, the old folder still works, but only for easy_npc. - Changed the preset browser to always list its entries in the same order.
- Removed the experimental user-defined NPCs; the extra config file is no longer read or created.
- Removed the unused
SERVER_SKINskin type. - Added a new game test structure to support game tests in 1.21.11 and higher.
- Added a reload button to each entry of the player skin screen, to fetch a single skin again.
- Added the reason to the log whenever an NPC is removed, so an unexpected despawn can be traced.
- Added suggestions to
/easy_npc render set species. - Added support for presets from other mods, which no longer have to use the
easy_npcnamespace. - Added a preset visibility that hides a preset from the preset browser and the NPC screens.
- Added a teleport distance and a resting spot offset to the follow objectives.
- Added item tags, a "can be scared" option and a "only without owner" option to "Follow item".
- Added an item field to the look objectives, so an NPC can watch a chosen dropped item.
- Added an identifier per NPC, so a mod can find its own NPCs again.
- Added an option to spawn an NPC again when its owner logs in.
- Added game tests for NeoForge, which had none, and restored the spawn egg, dialog screen, data
- Added game tests for every configuration and editor screen, covering all three mod loaders.
- Added game tests for the home position, covering the spawn default, the stored value and
- Improved the model name parsing, which mistook a species ending in "_shiny" for a variant.
- Improved following of flying NPCs, which now steer directly when there is no path through the air.
- Improved third party support with an API for presets, own objectives and objective configuration.
### 7.4.0
- Fixed #807 by no longer pulling every same-type NPC within 32 blocks into a "Defend Self" fight.
- Fixed #805 by evaluating all visibility settings together instead of stopping at the first one.
- Fixed #804 by keeping the custom name on Doppler NPCs for name based textures and the name tag.
- Fixed #803 by adjusting assets to match typical Minecraft style instead of generic UI style.
- Fixed the day and night detection, which counted sunrise as night and sunset as day.
- Fixed the visibility in the Nether and the End, which used the Overworld time.
- Fixed the time and game mode visibility checkboxes appearing in a random order.
- Fixed game tests only being able to fail on their first assertion, which hid later failures.
- Fixed the "Saddled" horse skin variants, which never showed a saddle.
- Changed "Visible to Owner" and "Visible to Team" to also follow day, night and game mode.
- Changed Evoker, Illusioner and Vindicator variants without "Crossed Arms" to keep their arms down.
- Added a "Defend Faction" objective that attacks whoever hurt a nearby faction member or player.
- Added a system message when faction members fight each other and the faction stays out of it.
- Added a head equipment slot for Illagers so their captain banner can be removed or swapped.
- Added a day and night preview to the display configuration screen.
- Added unit and game tests for the visibility attributes and the faction defense.
- Improved the visibility check performance by reading the display attributes only once per check.
- Improved display attributes from older versions by completing them with their defaults.
- Improved the attack objective screen by disabling "Protect Owner" and "Defend Faction" when unset.
### 7.3.0
- Improved skin variants by carrying their data as typed fields instead of parsing variant names.
- Centralized the Cobblemon mod id and default model on shared constants.
- Reduced duplicated enum code with a shared
EnumUtilshelper forget(String)lookups. - Optimized villager profession and type lookups to use direct registry keys instead of scans.
- Optimized enum name lookups by caching tag names, ids and keys once at construction.
- Added unit and game tests for skin variants, villager resolution and the enum helper.
### 7.1.2
- Fixed #801 by using combination for NPC, Dialog and Action UUIDs to avoid collisions for action
### 7.1.1
- Fixed #800 by lazy loading entity types.
- Fixed #799 by fixing edge cases and adding additional documentation and better log messages.
- Fixed #798 by considering console, commands and command blocks as trusted command sources.
- Fixed a critical single-player / LAN issue where client and server NPCs shared the same registry.
- Fixed a memory leak in the configuration menu handling and added timeout and disconnect cleanup.
- Fixed duplicate downloads when several NPCs request the same skin at the same time.
- Fixed skin lookups failing after a error so a slow server no longer freezes the game.
- Fixed the URL skin screen freezing the game while checking a remote image; the check now runs in
- Added a new World Spawner block that limits an NPC preset across the whole world (all dimensions),
- Hardened remote skin downloads with a strict size limit and safe redirect handling to prevent
blockPrivateAddresses setting.- Improved server performance by only sending entity and player load events to NPCs that actually
### 7.0.0
- Fixed #794 by using the expected type for NPC rendering.
- Fixed scaling screen preview by pinning the entity feet to the 0 line of the scale ruler, so NPCs
box updates.
- Fixed #791 by adding Wandering Trader NPC type.
- Fixed #788 by extending the AI safeguards to Epic Fight and raw NPC variants (Piglin, Villager,
- Fixed #787, #531, #237 and #184 by adding a faction system with
/easy_npc factioncommands,
- Fixed #787, #771 and #572 by adding a new
targetobjectives tab to attack hostile factions or
- Fixed #786 by adding gender and shiny model variants for Cobblemon NPCs, searchable via
female
shiny in the model selection.- Fixed faction combat between invulnerable NPCs by adding the new
Attackable by Factionscombat
- Fixed Cobblemon model selection previews for oversized species by scaling with Cobblemon's own
- Fixed faction management edge cases by validating faction names, sorting faction lists and
- Fixed custom skin reloads by loading and clearing texture caches per skin model instead of always
- Improved the
Attackable by Players/Monsters/Factionscombat attributes to work independently of
Invulnerable, each opening a targeted hole for its own attacker group.- Improved preset command and network handling by splitting the large handlers into smaller focused
- Added Easy Model Entities Support.
- Added faction manager and faction editor screens to create, color and delete factions and manage
FACTION_MANAGEMENT security feature.- Added new
Miscattributes tab as home for the NPC faction assignment. - Added reusable warning and help icon components for inline hints with tooltips.
- Added additional unit and game tests for factions, target objectives and Cobblemon model variants.
### 6.25.0
- Fixed #782, #636, #622 by preserving data components during validations.
- Fixed #780 by caching remote texture downloads and reducing duplicate registrations.
- Fixed #767 by clamping attribute sliders against extreme values from other mods.
- Fixed #754 by adding custom data item matching for NPCs with actions and conditions.
- Fixed texture manager running in the wrong thread may cause crashes and deadlocks in >= 1.21.x.
- Fixed empty UUID handling for action conditions.
- Fixed execution limit reset for actions.
- Added texture registration queue to avoid multiple simultaneous downloads in the same tick.
- Added NPC coin, key and red token as consumable items for NPCs with actions and conditions.
- Added
Welcome Coin Traderas example NPC preset with custom coin, key and red token item data. - Added attribute safeguards against extreme values from other mods.
- Increased fallback max health value from 1024 to 4096 for high-health NPCs.
- Improved texture manager by reducing duplicate texture checks and registrations.
### 6.24.0
- Fixed #459, #775 by adding an option to block interactions with invisible NPCs.
- Fixed #774 startup crash related to optional Epic Fight and Cobblemon entity type maps.
- Fixed #773 by checking timed trade resets during base ticks and before opening trade screens.
- Fixed trade reset timing by increasing internal tickers correctly.
- Added time of day and weather conditions for #459.
- Added additional unit and game tests for trade resets, ticker handling and entity attributes.
- Added
Skywatch Scoutas example NPC preset with time of day and weather conditions.
### 6.23.0
- Fixed #774 by migrating isSunBurnTick error to 26.x.
- Fixed #772 by adjusting texture retries with 403 and 404 errors and lowering logging.
- Fixed #770 item rendering for Epic Fight NPCs (Evoker, Pillager, Vindicator and humanoid skins).
- Fixed #769 door loops with NPCs not reliably opening or closing doors.
- Fixed #760 by adding a dialog option and config setting (buttonConditionMode: LOCK or HIDE) to
- Fixed #709 by adding color picker popup for names with 32 colors and/or a manual RGB/hex value.
- Fixed NPC name color being reset when renaming without a specified color by preserving the
- Improved the door movement attributes so "Pass Door" is automatically enabled while "Open Door"
### 6.22.0
- Fixed #766 by passing the full server player context to command execution for better compatibility
- Fixed #764 by adding entity health, npc health conditions and NPC preset
Grukk, the Sparring Post as example for using these conditions.- Fixed #763 by making sure dialog button execution limits are now recorded.
- Fixed #758 by providing a example NPC preset named
One Wish Companion. - Fixed crashes related to 3rd party villager AI reading non-registered brain memories on Easy NPC
- Fixed Dialog buttons are not locked for server-side data as preparation for #760 and #644.
- Fixed #628 by adding conditional dialog opening support / command for better control over when
- Added brain AI for Piglin and Piglin Brute NPCs and registered the full vanilla brain memory set.
- Added additional guns to the gun tag for #757.
- Added a new "Open Dialog (Conditional)" action that opens a named dialog only if its conditions
- Added new entity health and npc health conditions for actions, dialogs and dialogs buttons.
- Added Piglin, Piglin Brute and Zombified Piglin NPCs invulnerable, for consistency with other
- Added a new "Knockback Immunity" combat attribute that prevents the NPC from being knocked back by
- Added a new "Explosion Immunity" combat attribute that makes the NPC immune to explosion damage
- Moved the "Projectile Collision" attribute to the Combat attribute screen, where it fits better
### 6.21.0
- Fixed item attachment for Illagers in crossed-arms pose.
- Fixed broken illager crossbow attack goal.
- Fixed crashes related to 3rd party items which are not renderable as hand items #756.
- Fixed crashes related to 3rd party mixins trying to access non-existing model parts #756.
- Fixed log.info spam message by reducing log verbosity and adding additional checks for custom
- Improved EasyNPCModelManager performance.
- Refactored NPC renderers to remove default hand item layer.
### 6.20.0
- Fixed crashes related to 3rd mods trying to access non-existing NPCs goals.
### 6.19.0
Note: This update adjusted the dialog background images by 10x6 pixels, which may require users to
adjust their custom dialog backgrounds if they are using custom ones.
- Fixed #752, #130 by adding dialog button condition support to allow to disable buttons.
- Fixed #683, #215 by adding typewriter effect support for dialog text.
- Fixed #690, #309 by allowing conditions for dialog, dialog buttons and interactions.
- Fixed smaller UI issues with dialog screen layout and background.
- Refactored dialog background images by 10x6 pixels on each side.
- Refactored dialog screen layout to better fit the new background size and improve appearance.
- Added typewriter effect and client configuration for dialog text.
- Added condition symbols to indicate the condition status for dialog, buttons and interactions.
- Added amount field for item conditions to allow checking for specific amounts of items.
- Added
Threshold Wardenas example NPC preset with various conditions and actions. - Added smaller bug fixes and optimizations related to dialog conditions and button states.
### 6.18.0
Note: This update changes the internal data format for conditions and actions, which may reset /
remove legacy existing execution-limit entries without stored IDs.
- Fixed #745 by adding conditions for actions to allow more complex and dynamic behavior.
- Fixed #652 by adding dialog button tooltip for longer texts.
- Fixed #687 by adding command value tooltip to show the full value.
- Added Experience Level conditions.
- Added Game-mode conditions.
- Added has item in inventory condition.
- Added has item in hand condition with (main hand and off-hand) support.
- Added player health condition.
- Added player tag condition.
- Added player team condition.
- Added Goldmere example NPC preset with various conditions and actions.
- Added negative condition support to allow negating conditions for more complex logic.
- Removed parameter pseudo IDs for
ActionDataEntryand replaced them with random UUIDs. - Refactored condition system to allow more condition types.
### 6.17.0
- Fixed #738 by adding additional tooltips for "Execute as player"
- Fixed to detailed logs by reducing log.info messages during startup and in-game.
- Added additional unit and game-tests.
### 6.16.0
- Fixed #732 by providing option to disable ESC key and close button for dialogs.
- Fixed #723 by avoid auto-close in specific cases like trading screens.
- Added general dialog configuration options to allow users to customize dialog behavior.
- Added avatar scaling and position offset options for dialogs.
- Added missing translation keys.
### 6.15.1
- Fixed #735 by extending the correct base class.
- Fixed several 26.1.2 specific issues from manual spawn testing.
### 6.15.0 (Trades, Player Heads, Epic Fight and QOL updates)
- Fixed #731 by resyncing species data, if species list is empty on the client.
- Fixed #730 by improving Epic Fight integration and enabled experimental features.
- Fixed #729 by making sure trade uses are stored correctly.
- Fixed #728 by adding custom head support for player heads.
- Fixed #689 by showing remaining trade uses and allow resetting manually and automatically.
- Fixed #218 and #132 with new trade configuration screen and better support for custom trades.
- Fixed trade specific edge by switching between basic and normal/advanced trading mode.
- Fixed dialog button text is truncated with tooltip showing the full text.
- Fixed Cobblemon animation issues by syncing animation state with Cobblemon Animation System.
- Added per trade specific actions to allow users triggering actions after buys.
- Added trade reset button to reset all trades easily.
- Added trade usage information to trade configuration screen.
- Added experimental feature state to allow users to manually enable experimental features.
- Added Griselda Grindstone as example trader with actions.
- Cleanup test files.
### 6.14.0
- Fixed #727 by making sure changes are synced to the client when changing values.
- Fixed #726 by adding additional allow lists for specific commands.
- Fixed #686, #389, #304, #211 by adding basic Cobblemon support with Cobblemon NPC.
- Fixed dialog misalignment and navigation issues by adjusting dialog sprites and screens.
- Fixed x and z root rotation by correcting rotation logic and pivot calculations.
- Added basic Cobblemon support with custom NPC type and model for testing.
### 6.13.0 (Security and Permissions Updates)
Notes: This update includes better security checks and permissions for multiplayer environments. It
allows to execute server commands which can be potentially dangerous if used with malicious intent.
- The update splits the model root data and logic from the rest of the model part data and logic,
- Fixed #725 by separating model root data and logic from the rest of the model part data and logic.
- Fixed #722 by supporting .sbnt files as local presets.
- Fixed #675 by adding dedicated assets for dialog and config screen backgrounds.
- Fixed #605, #532, #529 with new security checks and permissions system.
- Fixed #469, #311 by adding experimental api documentation and examples for custom model support.
- Fixed double rendering of config screen background by removing redundant background rendering.
- Fixed Ghast and Slime hitbox and name tag position issues by adjusting bounding box.
- ⚠️ Added security checks to prevent potential exploits and allow safe usage in multiplayer
- Replaced dynamic dialog screen background with a static one for better performance, customization
- Replaced dynamic config screen background with a static one for better performance.
- Refactored config-ui specific components and removed them from the core mod.
- Removed duplicated sprite sheets.
- Prepare permission system for possible Luck Perms integration in the future like #712.
- General code cleanup and optimizations related to config screen rendering and assets.
### 6.12.0
- Fixed #714 by adding additional checks for custom model part list based on vanilla models.
- Fixed #713 by reducing log verbosity with downgraded per-NPC INFO messages to DEBUG and
- Fixed #711 by reduced oversized startup/config log output.
- Fixed NBT validation guard to prevent unnecessary buffer allocations in production.
- Added model part name constants to EasyNPCModelManager for consistent usage across mixins.
- Improved RenderEntityTypeSupportConfig by enhancing filter logic and optimizing data structures
- Removed verbose debug logs that dump large data structures.
### 6.11.1
- Fixed #710 by improving backward-compatible parsing for recoverable trade data.
### 6.11.0
- Fixed #703 rendering issue with new custom layer system and hand renderings.
- Fixed #701 by adding additional safeguards and logging for invalid trading offers.
- Fixed smart animation not working properly with modified head position.
- Fixed head tracking by moving player detection back to server side-only.
- Fixed CustomLookAtPlayerGoal to better handle edge cases and reduce jitter.
- Fixed issue with Doppler NPCs keeping their hand inventory.
- Improved PoseManager logging message.
- Updated logo with a new design.
### 6.10.0
- Fixed #698 by adding try and catch for 3rd party entity creation.
- Fixed #695 by clearing model part rotations/positions when switching to a
DEFAULTvanilla pose. - Fixed #695 by applying lock rotation and pose animation only when the NPC is idle.
- Fixed #695 by correcting root rotation pivot to use actual bounding box height instead of 0.5f.
- Fixed multiple objective registration issues including inverted
isTargetedPlayercheck, wrong
targets.
- Fixed goal reference being retained after objective is unregistered.
- Removed auto-lock of ROOT rotation when loading poses; root lock is now user-controlled.
- Added lock rotation checkbox to the advanced and custom pose configuration screens.
- Added model-specific pose key filtering in
ConfigurationMenuHandlerfor the default pose screen. - Added unit tests for
CustomPosition,CustomRotation,CustomScale,ModelPose,
ModelAnimationBehavior and ModelAnimationData.- Added
NPCDataIsolationTestHelperand game tests for Fabric and Forge. - Increased max head yaw range from 60° to 65°.
### 6.9.0
- Fixed #692, #666 by adding caching and safeguards to prevent redundant retriggering of NPC entity
- Fixed #651, #617 by adding basic custom poses for all supported NPC types.
- Fixed #597 by adding additional Flee goals for fleeing from players, villagers, monsters, ...
- Fixed pose loading to read directly from mod resources instead of copying files to disk.
- Fixed duplicate
saveNPCcalls on entity join by checking existing registry entry first. - Added
despawnandspawncommands to remove and re-spawn NPCs by UUID with configurable removal
- Added
ModelPoseAPIandEasyNPCEntityHandlerpublic API classes for controlling NPC poses and
- Added pose data files for all supported NPC types.
- Added lock rotation checkbox to the basic pose configuration screen.
- Added
MoveToPositionGoalto move an NPC to a position before executing a callback action. - Added
EasyNPCLookControlandEasyNPCBodyRotationControlto respect locked root rotation. - Added synced owner change and dimension change to the NPC entity data index.
- Added EasyNPCItemAttachmentLayer into various entity renderers.
- Added dedicated
Flee Objectiveconfiguration tab with objectives for fleeing creepers, monsters,
- Added
FOLLOW_ITEMobjective to the follow objectives tab to make NPCs follow item entities by
minecraft:apple).- Added
LookAtEntityByUUIDGoaland enabled the look-at-entity-by-UUID and look-at-owner objectives
- Added
persistentflag toSynchedDataIndexso that transient indices (e.g. crossbow charge,
- Added configurable
customParticlesEnabledflag toSlimeBasefor API consumers. - Added
SoundType.PETand mappedCAT_PURRto the cat NPC for tamed ambient sound variety. - Reduced log verbosity for periodic NPC save operations from INFO to DEBUG.
### 6.8.3
- Fixed #680 by enforcing version miss-match by upgrading network protocol version.
- Fixed #679 by resetting position, rotation and size for name tag.
- Fixed #665 by adding multi state slide for root rotations.
- Fixed #664 by adding option to disable following mouse cursor for easier posing.
- Fixed #663 by improve support for X and Z root rotations.
- Fixed #661 by adding quick rotation with NPC wand and sneaking to the NPC to rotate the root to
- Fixed move tool is wrongly triggering interactions by adding check for move tool in interaction
- Fixed Preset Item is wrongly triggering interactions by adding check for preset item in
- Fixed Slime and Ghast hitbox and name tag position issues by adjusting bounding box and eye height
- Fixed Slime and Ghast GUI position by adjusting offset values.
### 6.8.2
- Fixed #677 by extending
SafeMerchantDatawith notifyTrade to avoid crashes. - Added progression data support for leveling up NPCs based on player interactions and actions.
- Added global NPC tracking system for better management and debugging of NPCs across the world.
- Added
OriginalModelConfig.withVariantTexture()option to allow using variant textures with the
### 6.8.1
- Fixed #676 by using existing preset helper method instead of custom one.
### 6.8.0 (Adding API support)
- Fixed #667 by adding warning messages and additional checks for invalid network packets.
- Fixed Horse spawn eggs model.
- Fixed pose support for allay, chicken, creeper, fox, ghast, horse, illager, iron golem, slime and
- Added NPC base classes for better API support.
- Added NPC raw classes for advanced API support.
- Added Slim and Ghast NPC types.
- Added Custom Model API for easier integration with other mods and custom models.
- Refactored internal data handling and registration for better maintainability and future
### 6.7.1
- Fixed #657 and #656 by adding additional client side checks for vanilla bug.
### 6.7.0
- Fixed #650 by implementing Wolf Leg Animations in setupAnim method.
- Fixed #648 by fixing canBeHitByProjectiles translation.
- Fixed #645 by adding
allowBypassInvulnerabilityconfig option to allow/deny bypassing
- Fixed delete button showing label even with small width.
- Fixed up and down buttons not positioned correctly in some cases.
- Fixed name tag showing up for dialog and configuration UI.
- Fixed distance action issue were multiple actions are not properly triggered.
- Fixed issues with NPC presets.
- Fixed Cat NPC and Wolf NPC owner data not syncing properly.
- Added preset browser for easier selection of common NPC presets.
- Added preset .snbt (text) export and import functionality for sharing NPC presets.
- Refactored existing NPC presets to use new .snbt format.
- Refactored spawner system to use new preset format for better maintainability and future
### 6.6.2
- Fixed #643 by rework scaling system.
- Fixed scaling not properly updating hitbox and nametag position after restart / reload.
- Added MID and MOUSE_OVER name tag visibility modes for finer control over NPC name display.
- Added team-based name tag visibility support respecting vanilla Team.
### 6.6.1
- Fixed #638 by refactored internal data handling for display attributes.
### 6.6.0
- Fixed #634 by implementing asynchronous texture loading with dedicated thread pool.
- Fixed texture loading blocking render thread causing game freezes.
- Fixed race conditions in texture reload protection using atomic operations.
- Fixed resource leaks in HTTP connections during remote texture downloads.
- Fixed URL validation spam allowing multiple simultaneous downloads of the same texture.
- Fixed exception handling for remote image validation preventing crashes on invalid URLs.
- Fixed
defineId called for:warning messages during NPC loading. - Refactored texture loading architecture with multi-level defense and rate limiting.
- Refactored entity data registration logic for better maintainability.
- Converted data classes to modern Java records for better immutability and thread-safety.
- Added thread-safe session server spam protection with ConcurrentHashMap.
- Added comprehensive error recovery with automatic cooldown reset on failures.
- Improved texture loading with 2-thread pool and 500ms rate limiting.
- Improved exception handling with specific catch blocks for IIOException and FileNotFoundException.
### 6.5.2
- Fixed Villager profession and job skin issue.
- Improved GitHub workflows by adding cache for gradle dependencies.
- Improved Gradle build time and cleanup tasks.
### 6.5.1
- Fixed #632 by implementing ON_KILL action type and event.
- Fixed #629 by improving texture handling performance, caching, and memory usage.
- Fixed kill command is not working on NPCs.
- Fixed texture reload protection preventing cache reload after eviction.
- Fixed WebP validation bug in remote image validator (missing return statement).
- Refactored texture handling logic for better maintainability and future improvements.
- Added time-based reload protection (60 seconds) to replace permanent blocking mechanism.
- Added missing variant textures for chicken, pig and wolf.
- Added additional unit tests for texture handling.
- Improved gradle build tasks.
### 6.5.0
- ⚠️ Removed jar-in-jar bundle approach for better mod compatibility and api capabilities.
- Fixed #627 scissor implementation for better compatibility with other mods.
- Fixed #625 lively animation issues when using rotated or moved model parts.
- Fixed default animation are canceled when using scaled model parts.
- Added better pose animation control with smart, default und none options.
### 6.4.1
- Fixed #626 screen switching logic for different NPC UUIDs, thanks to
Spawnbladefor the detailed
### 6.4.0
- Fixed #626 by improving dialog data validation and error handling.
- Fixed #623 by refactoring render data and render handling.
- Fixed #622 by making sure custom data are properly saved and loaded.
- Fixed open dialog action type to allow opening dialogs from other NPCs.
- Fixed hashing issues by adding missing equals and hashCode methods for ConditionDataSet and
- Added custom data test item for #622 and easier testing of custom data.
- Improved records and fixed potential issues with missing data.
### 6.3.0
- Refactored config ui specific components and removed them from the core mod.
- Fixed dialog data by filtering dialog data before sending to the client.
- Fixed dialog editor layout issues and improved usability.
- Fixed missing default values for some dialog data fields.
- Added dialog priority support to control the order of dialog execution.
- Added condition support for dialog and scoreboard actions.
- Added frequency support for dialog to limit how often an dialog can be shown.
- Added new NPC preset to for scoreboard and condition support.
- Improved dialog button data format by removing redundant fields.
### 6.2.0
- Fixed legacy custom name parsing.
- Fixed string injection within dialogs.
- Fixed missing translation for action types.
- Added scoreboard action type to increase, decrease, set scoreboard values.
- Added
@score(...)NPC macro to display scoreboard values in the dialog. - Added additional unit tests.
- Improved spin button with indicators and better usability.
### 6.1.2
- Fixed container and menu sync issues with missing close container packets.
- Fixed close button not working in some cases.
- Fixed jumping mouse cursor between screen transitions.
- Fixed translation files and removed duplicate and deprecated entries.
- Moved Easy NPC wand to existing core item tab instead of creating a new one.
- Added cat pose support for different model parts (except tail).
- Improved EasyNPCWand glowing effect performance by disabling it when not needed.
- Improved custom entity detection by excluding non-living entities like displays, makers, throwns
- Improved cat variant handling.
### 6.1.1
- Fixed #615 by checking if item is equipped in one of the hands.
- Fixed #612 by re-validating entity types.
- Fixed #610 by force sync of hat and head layers for specific models.
- Fixed orc textures.
- Fixed cat variant handling for 1.21.5.
- Fixed player render by adjusting render state
skinfield. - Fixed cat renderer by adjusting render state
texturefield. - Fixed position, scaling and rotation preview.
- Fixed Fairy model.
- Improved custom model support and performance, by moving related logic into to client side only.
- Improved caching of player to UUID mappings for player skins.
- Limited change model commands and logic to Doppler NPCs only.
- Added renderEntityRaw method to render NPC as-it-is.
### 6.1.0 ✨
This is a major release. Please back up your worlds and NPC data before updating. This version
contains many improvements, optimizations, and internal changes that are **not fully compatible**
with earlier releases.
⚠️ Breaking changes
- Existing NPCs and their configuration data from versions before 6.1.0 may not load correctly or
- Internal data formats and some behaviors have been refactored to support new use-cases.
🧩 New modular structure
Easy NPC is now split into three separate mods:
- Easy NPC** – Bundle that includes both Core and Configuration UI for a plug‑and‑play experience.
- Easy NPC: Core** – Lightweight runtime and logic for NPCs, with minimal dependencies. Intended
- Easy NPC: Configuration UI** – Standalone configuration interface for creating and editing NPCs.
🎯 Why this change?
- Allows servers and modpacks to ship only the **Core** mod on the server side for a leaner setup.
- Reduces memory usage and load times when the UI is not required everywhere.
- Makes development and testing faster by separating UI and core logic.
[history]: https://github.com/MarkusBordihn/BOs-Easy-NPC/commits/
[upgrade_guide]: https://github.com/MarkusBordihn/BOs-Easy-NPC/wiki/Upgrading
## Note
This change log includes the summarized changes. For the full changelog, please go to
the [GitHub History][history] instead.
Note: Please always back up your world / NPCs before updating to a new version!
Check the [upgrade guide][upgrade_guide] for more information.
### 7.15.0
- Fixed #838 by keeping preset imports silent when run through
/executeor command blocks. - Fixed #380 by applying the NPC limit to the default spawner as well.
- Fixed #849 by allowing resource pack sounds in the sound configuration.
- Fixed #349 by no longer spawning NPCs left-handed at random.
- Fixed #851 by locking dialog buttons per dialog, not across dialogs with the same label.
- Fixed deleted or duplicated NPCs returning, memory leaks and several owner and UI issues.
- Fixed the Epic Fight Wither Skeleton NPC missing its Epic Fight mob patch.
- Fixed off-center inventory screens and their close button overlapping the "Custom" trading tab.
- Fixed scaled Doppler NPCs keeping the full hitbox of the mimicked entity.
- Fixed NPCs on a player's shoulder ignoring their scale and the Doppler's mimicked model.
- Changed requirements: same mod version on client and server, Easy Model Entities 2.5.0+.
- Changed backups of all worlds and killed NPC data to expire after 30 days, see
storage.cfg. - Added "Jump", "Assist Owner" and "Follow Nearest Player" to fix #845, fix #310, fix #761.
- Added an NPC inventory with item pickup and death drops to fix #111, fix #197, fix #543, fix #670.
- Added "Sit on Shoulder", a boss bar and
/easy_npc debug core loglevelto fix #577, fix #219. - Added the "Hold" animation mode, a "Bank Teller" preset and new API methods for addons.
### 7.14.0
- Fixed #846 by keeping custom poses for players who start seeing the NPC later.
- Fixed attribute and trading settings missing for players who start seeing the NPC later.
- Fixed changed max uses, XP and trading type not shown in the trading screens until reload.
- Fixed
/easy_npc sound setchanges not reaching players until the NPC was reloaded. - Added game tests that check NPC poses and settings after respawns and for new players.
### 7.13.0
- Fixed color and formatting tags in dialog button names showing as plain text.
- Fixed the button preview in the editor showing lowercase names as a raw translation key.
- Fixed the "Move EasyNPC" item not working for NPC owners outside of creative mode.
- Fixed
/easy_npc owner setreporting success even when the owner could not be changed. - Fixed the game crashing when the URL or player skin screen showed a skin download error.
- Fixed the preset browser search showing no results after scrolling down the list.
- Changed the network protocol version, so client and server must run the same mod version.
- Added
@initiator,@npcand@score()support to dialog button names to fix #841. - Added automatic client tests with the Client Runtime Interface Toolkit.
- Larger core refactoring and code cleanup.
### 7.12.2
- Fixed the Fairy hitbox being far too small, so its name tag and speech bubble sat in its body.
- Fixed scaled NPCs keeping their old hitbox and eye level, so hits, clicks and looking missed.
- Fixed oversized names, lists and NPC data in network packets being read without any limit.
- Fixed invalid NPC positions, scales, attributes, names and durations from being applied.
- Changed Fairy NPCs to take up the space of their model, so they collide and can be clicked.
- Changed Skeleton, Stray and Bogged NPCs to the vanilla hitbox height, they were slightly short.
- Changed the network protocol version, so client and server must run the same mod version.
### 7.12.1
- Fixed #836 by always showing "Restore", including datapack presets, with a reason tooltip.
- Fixed preset import and export messages missing, wrong or not warning about replaced NPCs.
- Fixed the preset browser reloading on each keystroke, leaking NPCs and clearing the selection.
- Fixed selection box drop-down lists being covered by the checkboxes and labels behind them.
- Fixed the preset list sorting, filter order and layout clipping options in small windows.
- Fixed
/easy_npc preset import datawithout a position importing it as a default preset. - Fixed spawn rate limit leaks, unstable preset IDs and "Spawn New" stacking NPCs on one spot.
- Changed "Restore" to refuse instead of spawning a copy when it is not permitted.
- Added sorting, a match count, reload, auto-close, the NPC ID and tooltips for presets and skins.
- Added
matching <pattern>batch imports with limits, a confirmation and a clickable position.
### 7.12.0
- Fixed #833 by showing Easy NPC Wand outlines only to the wand holder, owner and admins.
- Fixed #834 by adding "Set Home Here" and "Reset Home" buttons to the position configuration.
- Fixed #835 by keeping the NPC ID and position in exported presets, so imports restore the same
- Fixed preset imports and spawn eggs losing the owner's list entry and owner objectives.
- Fixed NPCs restored from an automatic backup losing their owner and becoming ownerless.
- Fixed selection lists showing only their first six entries and hiding the rest.
- Changed importing a preset to update the original NPC at its stored position instead of adding a
- Changed completed trades to play the "Trade completed" sound, which stayed silent before.
- Changed the API dialog call to report an unknown dialog label instead of always reporting success.
- Changed NPCs without arms to carry held items at the head or body instead of hiding them.
- Changed the optional Easy Model Entities dependency to require version 2.4.0 or newer.
- Added a "Sound" configuration with sounds for dialogs, speech, swimming, eating and fall damage.
- Added a searchable sound selection with volume and pitch sliders to the "Sound" configuration.
- Added a "Block Vehicles" option to keep NPCs out of boats, minecarts and modded chairs.
- Added the profession selection to all skin configurations and a new built-in skin per NPC type.
- Added client settings to hide name tags behind walls and
highlightEnabledfor wand outlines. - Added an "Exists" condition operation and API access to NPC movement, actions and presets.
### 7.11.0
- Fixed #828 by no longer freezing the server on logout when NPCs follow or watch the player.
- Fixed #831 by moving routine NPC removal messages to the debug log.
- Fixed #832 by making humanoid NPCs ignore custom player models, animations and poses.
- Fixed hourly NPC backups stuttering on large worlds and retaining timestamps of removed NPCs.
- Fixed hourly NPC backups losing the identity, owner and position of the backed-up NPC.
- Fixed owner-login restoration duplicating, repeatedly restoring, reviving or moving unloaded NPCs.
- Fixed NPC index and file synchronization issues causing lost NPCs, crashes or false warnings.
- Fixed stale NPC data after unloading, avoided redundant writes and added repeated-unload warnings.
- Fixed the preset browser failing to list custom and world presets saved in the SNBT format.
- Fixed speech bubbles losing their text and turning translucent with Iris shaders.
- Fixed the "Opacity" of an NPC being ignored while a shader pack is active.
- Fixed text formatting and macro parsing for translated speech bubbles and mod API texts.
- Fixed speech bubbles and their text staying hidden behind blocks while a shader pack is active.
- Added
minLightLevelto keep speech bubbles readable in dark surroundings.
### 7.10.0
- Fixed #829 by allowing bats and other non-walking mobs as the render entity of a Doppler NPC.
- Fixed the Wandering Trader NPC rendering without its texture.
- Fixed NPCs rendered as a bat, frog or warden showing a static pose instead of their animation.
- Fixed the NPC name tag showing above the previews in the "Custom Models" configuration.
- Fixed speech bubbles being cut off by walls, doorframes and the NPC's own body.
- Fixed the previews in the "Custom Models" configuration.
- Changed the previews in the "Custom Models" configuration to stand on a common ground line.
- Changed overlapping speech bubbles to move apart and to stay visible when the NPC is off-screen.
- Changed "Navigation: Automatic" to use flying movement for NPCs rendered as a flying mob.
- Changed the render entity list to hide seats, paintings, thrown items and other non-mob entities.
- Added a "Min. hover height" slider for flying NPCs and client settings for speech bubbles.
### 7.9.0
- Fixed modded fish NPCs, like the ones of Tide 2, spinning around instead of swimming upright.
- Fixed "Navigation: Automatic" using ground movement for water NPCs and aquatic model NPCs.
- Fixed the "Random Swimming" objective never moving an NPC that uses aquatic navigation.
- Fixed a swimming NPC shaking or twitching in place instead of holding its tilt and swim depth.
- Fixed a swimming NPC turning in circles forever when it could not reach its next path point.
- Fixed an NPC that fell into water never getting out of it again.
- Fixed a following NPC searching a new path every tick while its target was unreachable.
- Fixed the "Move to" actions stopping short of a raised target or not starting while in the air.
- Fixed "Move back to Home" ignoring height differences and never returning from beyond 32 blocks.
- Fixed the "Opacity" input field being too narrow to show a value of 100.
- Fixed a damaged NPC with an Easy Model Entities model never flashing red.
- Changed modded water NPCs to swim level, vanilla water mobs keep their tilt as before.
- Changed the "Move to" actions to walk up to 48 blocks and to teleport only beyond that range.
- Changed "Move to" and "Move back to Home" to give up after three seconds without progress.
- Changed the timeout of a "Move to" action to count real ticks, it ran twice as long before.
- Changed a new "Random Swimming" objective to rank below following, fleeing and attack goals.
- Changed "Opacity" of an NPC with an Easy Model Entities model to be applied by that mod itself.
- Changed the minimum Easy Model Entities version to 2.3.0, older versions disable the integration.
- Added "Depth below surface" and "Height above floor" sliders for the swim level of an NPC.
- Added log entries for the NPC files written on a world save, with a warning above 250 ms each.
### 7.8.1
- Fixed #827 by rendering fish NPCs in water upright instead of always flopping on their side.
- Fixed #828 by keeping a damaged NPC from blocking the world save, it now falls back to defaults.
- Fixed a restored NPC picking up a random preset ID that changed with every save.
- Changed NPC data to only be written to disk when it actually changed.
### 7.8.0
- Fixed smaller text and UI issues.
- Changed an NPC that is already standing at its target position to finish the movement right away.
- Changed the "None" skin tab to "Advanced", which now holds "Disable Skin" and the texture field.
- Changed the minimum Easy Model Entities version to 2.2.0, older versions are no longer accepted.
- Added a "Move to" action, which sends an NPC to a position, a player, its owner or its home.
- Added a "Move to and Wait" action, which runs the following actions only after the arrival.
- Added an arrival radius, a timeout and an optional teleport to both move actions.
- Added an "Opacity" attribute from 0 to 100, which fades body, armor and hand items together.
- Added a "Set Opacity" action, which turns an NPC into a ghost or hides it completely.
- Added the "Lantern Wraith" preset, a ghost walking a square with a short line at every corner.
- Added API access to the move actions and the opacity of an NPC.
- Added a "Resource Location" skin type, which renders any texture of a mod or a resource pack.
- Added an "Advanced" skin tab, which previews the NPC with the entered texture before applying it.
### 7.7.7
- Fixed #821 by keeping the transparency of 64x64 skins, which Fresh Moves needs for its eyes. Skins
- Fixed #818 by running trade actions for Villager and Wandering Trader NPCs as well.
- Fixed a dialog with several text variants switching its speech bubble size every second.
- Fixed the skin cache storing the processed image instead of the original download.
- Fixed the untranslated interval names, like
PER_DAY, of the "Execution Limit" condition. - Fixed the
sitanimation of Easy Model NPCs, which never used the built-in sitting pose. - Fixed the speech bubble being cut off by the head of an NPC when a player stood close to it.
- Changed speech bubbles to keep their screen size and to move down or aside when a player is close.
- Changed the speech bubble text to render 20% larger than a name tag.
- Changed a time based action set with a "Wait" action to run in order instead of picking one entry.
- Changed dialog texts to wrap later, so an existing dialog can switch to the wider screen layout.
- Changed fallback actions to skip screen actions without a player, like the regular actions do.
- Changed the minimum Easy Model Entities version to 2.1.0, older versions disable the integration.
- Added a "Wait" action, which pauses the following actions of an event for a chosen duration.
- Added the "Countdown Timekeeper" preset, a speech bubble count to ten ending in sound and sparks.
- Added scaling and rotation for Doppler NPCs behind the "Experimental Features" checkbox. Both only
- Added a "Sound" action, which plays a sound at the NPC with sound category, volume and pitch.
- Added "Every 5 Minutes" and "Every 15 Minutes" to the "Execution Limit" condition.
- Added a "Player Idle" condition, which checks how long a player has not moved.
- Added an "Immovable" attribute, which keeps an NPC in place against pushing and knockback.
- Added
/easy_npc pauseto pause a single NPC or all NPCs; the global pause ends with the server. - Added API access to the sound action, the pause state and the idle time of a player.
- Added a texture override per model slot for Easy Model NPCs over
/easy_npc render texture. - Added a "Repeat" playback mode with a count and a time limit to the "Play Animation" action.
- Added API access to animation variants, texture slots and textures of Easy Model NPCs.
### 7.6.0
- Fixed unclear mod conflict errors for duplicate entity data tracker IDs.
- Fixed third-party health bars rendering over NPC previews in configuration and dialog screens.
- Fixed Doppler and Easy Model Entities NPCs using default hitboxes instead of their model size.
- Fixed the
/easy_npccommands suggesting no NPC UUIDs at all on a server. - Fixed the pose list of the "Set Pose" action drawing over its input field.
- Fixed the untranslated "Loop", "After current" and "Action Data Type" labels of the action editor.
- Fixed the missing hint text of the "Chance" condition.
- Fixed long condition hints running out of the editor screen instead of wrapping.
- Fixed the misaligned help icons and text buttons of the "Message" action.
- Fixed changes to the "Set Pose", "Play Animation" and "Stop Animation" actions not being saveable.
- Fixed the speech bubble text sitting closer to its upper border than to its lower one.
- Changed the NPC suggestions to list the crosshair NPC first and only own NPCs without permissions.
- Changed a preset export to only store what differs from a new NPC, without position or owner.
- Changed a preset without objectives or actions to fall back to the defaults of its NPC type.
- Changed events without a player, like "On Spawn" or "On Kill", to check their conditions. An
- Changed a time based action to pick the owner as
@initiatorwhenever the owner is nearby. - Changed speech bubbles to stay visible from 5 up to 18 seconds, depending on the text length.
- Changed the "Set Pose" action to only show its input field for the "custom" pose entry.
- Added time based actions on five fixed steps, from every ~1 second up to every ~15 minutes.
- Added a "Message" action for chat, system message and speech bubble text without a command.
- Added text variants, a sender name, a recipient and translation keys to the "Message" action.
- Added the speech bubble graphic as
easy_npc:textures/gui/speech_bubble.pngfor resource packs. - Added a "Chance" condition in percent and a "Relationship" condition for owner and faction.
- Added spawn, owner login, state change, day / night, weather and the missing "On Trade" events.
- Added a base preset per NPC type under
easy_npc:api/preset/base/, usable as a parent preset. - Added the "Wandering Companion" preset, a talkative NPC built from time based messages.
- Added an action registry, an action handler, a preset validator and richer event data for mods.
- Added a tooltip with name, type and distance to every NPC suggestion of the
/easy_npccommands. - Improved the NPC suggestions, which appear without typing and tolerate a near miss of one block.
### 7.5.0
- Fixed #814 by giving every Cobblemon NPC its own animation state instead of one per species.
- Fixed #813 by letting "Move back to Home" work at any distance instead of only near its home.
- Fixed #812 by checking once per session whether a player changed their skin.
- Fixed #810 by accepting Cobblemon aspects of resource packs instead of only "shiny" and "female".
- Fixed the home position of an NPC always reading as unset, which hid "Home" in the configuration
- Fixed NPCs spawned from a preset, the preset browser or a respawn never getting a home position.
- Fixed an NPC spawned from the preset browser keeping the home position of the world the preset was
- Fixed NPCs being drawn as a white silhouette with a shadow in the configuration, skin and preset
- Fixed the server crashing when an NPC with a "Tempt" objective ticked its goals.
- Fixed a single or boss spawner spawning without any limit when its preset carried no stored NPC.
- Fixed the "Legacy Easy NPC Data" warning appearing for newly created NPCs.
- Fixed missing transparency corrections for old 64x32 skins, which showed layer artifacts.
- Fixed the player skin screen freezing for a moment while a player name was looked up.
- Fixed the "Reset look at ..." objective label, which read "Reset loot at ..." in some languages.
- Fixed the "No Gravity" attribute being ignored after a preset import, which let NPCs fall.
- Fixed the Fabric game tests, which crashed on start because of the development helper mods.
- Fixed NPCs losing their owner when they were spawned again after a despawn.
- Fixed objectives being deleted from an NPC when the mod providing them was missing at start.
- Fixed importing a preset without a stored id, which spawned an NPC without owner and home.
- Fixed "Follow owner" and "Look at owner" keeping their old target after the owner was changed.
- Fixed attack targets staying assigned to an NPC after the targeted entity was gone.
- Fixed the "Look at Item" objective, which could be stored but never did anything.
- Fixed walking animation for Doppler NPC and 3rd party models.
- Fixed Forge never running its server start-up step, which left NPC tracking, factions and the
- Fixed Forge development runs starting without any mixins, which disabled the vanilla entity
- Changed the movement objectives to a fixed order: flee, follow, return home, then stroll. NPCs
- Changed inserting a preset into a vanilla monster spawner to keep its delay, count and range.
- Changed "Follow owner" and "Look at owner" without a chosen target to follow the owner of the NPC.
- Changed datapack presets to
easy_npc/preset/, the old folder still works, but only for easy_npc. - Changed the preset browser to always list its entries in the same order.
- Removed the experimental user-defined NPCs; the extra config file is no longer read or created.
- Removed the unused
SERVER_SKINskin type. - Added a new game test structure to support game tests in 1.21.11 and higher.
- Added a reload button to each entry of the player skin screen, to fetch a single skin again.
- Added the reason to the log whenever an NPC is removed, so an unexpected despawn can be traced.
- Added suggestions to
/easy_npc render set species. - Added support for presets from other mods, which no longer have to use the
easy_npcnamespace. - Added a preset visibility that hides a preset from the preset browser and the NPC screens.
- Added a teleport distance and a resting spot offset to the follow objectives.
- Added item tags, a "can be scared" option and a "only without owner" option to "Follow item".
- Added an item field to the look objectives, so an NPC can watch a chosen dropped item.
- Added an identifier per NPC, so a mod can find its own NPCs again.
- Added an option to spawn an NPC again when its owner logs in.
- Added game tests for NeoForge, which had none, and restored the spawn egg, dialog screen, data
- Added game tests for every configuration and editor screen, covering all three mod loaders.
- Added game tests for the home position, covering the spawn default, the stored value and
- Improved the model name parsing, which mistook a species ending in "_shiny" for a variant.
- Improved following of flying NPCs, which now steer directly when there is no path through the air.
- Improved third party support with an API for presets, own objectives and objective configuration.
### 7.4.0
- Fixed #807 by no longer pulling every same-type NPC within 32 blocks into a "Defend Self" fight.
- Fixed #805 by evaluating all visibility settings together instead of stopping at the first one.
- Fixed #804 by keeping the custom name on Doppler NPCs for name based textures and the name tag.
- Fixed #803 by adjusting assets to match typical Minecraft style instead of generic UI style.
- Fixed the day and night detection, which counted sunrise as night and sunset as day.
- Fixed the visibility in the Nether and the End, which used the Overworld time.
- Fixed the time and game mode visibility checkboxes appearing in a random order.
- Fixed game tests only being able to fail on their first assertion, which hid later failures.
- Fixed the "Saddled" horse skin variants, which never showed a saddle.
- Changed "Visible to Owner" and "Visible to Team" to also follow day, night and game mode.
- Changed Evoker, Illusioner and Vindicator variants without "Crossed Arms" to keep their arms down.
- Added a "Defend Faction" objective that attacks whoever hurt a nearby faction member or player.
- Added a system message when faction members fight each other and the faction stays out of it.
- Added a head equipment slot for Illagers so their captain banner can be removed or swapped.
- Added a day and night preview to the display configuration screen.
- Added unit and game tests for the visibility attributes and the faction defense.
- Improved the visibility check performance by reading the display attributes only once per check.
- Improved display attributes from older versions by completing them with their defaults.
- Improved the attack objective screen by disabling "Protect Owner" and "Defend Faction" when unset.
### 7.3.0
- Improved skin variants by carrying their data as typed fields instead of parsing variant names.
- Centralized the Cobblemon mod id and default model on shared constants.
- Reduced duplicated enum code with a shared
EnumUtilshelper forget(String)lookups. - Optimized villager profession and type lookups to use direct registry keys instead of scans.
- Optimized enum name lookups by caching tag names, ids and keys once at construction.
- Added unit and game tests for skin variants, villager resolution and the enum helper.
### 7.1.2
- Fixed #801 by using combination for NPC, Dialog and Action UUIDs to avoid collisions for action
### 7.1.1
- Fixed #800 by lazy loading entity types.
- Fixed #799 by fixing edge cases and adding additional documentation and better log messages.
- Fixed #798 by considering console, commands and command blocks as trusted command sources.
- Fixed a critical single-player / LAN issue where client and server NPCs shared the same registry.
- Fixed a memory leak in the configuration menu handling and added timeout and disconnect cleanup.
- Fixed duplicate downloads when several NPCs request the same skin at the same time.
- Fixed skin lookups failing after a error so a slow server no longer freezes the game.
- Fixed the URL skin screen freezing the game while checking a remote image; the check now runs in
- Added a new World Spawner block that limits an NPC preset across the whole world (all dimensions),
- Hardened remote skin downloads with a strict size limit and safe redirect handling to prevent
blockPrivateAddresses setting.- Improved server performance by only sending entity and player load events to NPCs that actually
### 7.0.0
- Fixed #794 by using the expected type for NPC rendering.
- Fixed scaling screen preview by pinning the entity feet to the 0 line of the scale ruler, so NPCs
box updates.
- Fixed #791 by adding Wandering Trader NPC type.
- Fixed #788 by extending the AI safeguards to Epic Fight and raw NPC variants (Piglin, Villager,
- Fixed #787, #531, #237 and #184 by adding a faction system with
/easy_npc factioncommands,
- Fixed #787, #771 and #572 by adding a new
targetobjectives tab to attack hostile factions or
- Fixed #786 by adding gender and shiny model variants for Cobblemon NPCs, searchable via
female
shiny in the model selection.- Fixed faction combat between invulnerable NPCs by adding the new
Attackable by Factionscombat
- Fixed Cobblemon model selection previews for oversized species by scaling with Cobblemon's own
- Fixed faction management edge cases by validating faction names, sorting faction lists and
- Fixed custom skin reloads by loading and clearing texture caches per skin model instead of always
- Improved the
Attackable by Players/Monsters/Factionscombat attributes to work independently of
Invulnerable, each opening a targeted hole for its own attacker group.- Improved preset command and network handling by splitting the large handlers into smaller focused
- Added Easy Model Entities Support.
- Added faction manager and faction editor screens to create, color and delete factions and manage
FACTION_MANAGEMENT security feature.- Added new
Miscattributes tab as home for the NPC faction assignment. - Added reusable warning and help icon components for inline hints with tooltips.
- Added additional unit and game tests for factions, target objectives and Cobblemon model variants.
### 6.25.0
- Fixed #782, #636, #622 by preserving data components during validations.
- Fixed #780 by caching remote texture downloads and reducing duplicate registrations.
- Fixed #767 by clamping attribute sliders against extreme values from other mods.
- Fixed #754 by adding custom data item matching for NPCs with actions and conditions.
- Fixed texture manager running in the wrong thread may cause crashes and deadlocks in >= 1.21.x.
- Fixed empty UUID handling for action conditions.
- Fixed execution limit reset for actions.
- Added texture registration queue to avoid multiple simultaneous downloads in the same tick.
- Added NPC coin, key and red token as consumable items for NPCs with actions and conditions.
- Added
Welcome Coin Traderas example NPC preset with custom coin, key and red token item data. - Added attribute safeguards against extreme values from other mods.
- Increased fallback max health value from 1024 to 4096 for high-health NPCs.
- Improved texture manager by reducing duplicate texture checks and registrations.
### 6.24.0
- Fixed #459, #775 by adding an option to block interactions with invisible NPCs.
- Fixed #774 startup crash related to optional Epic Fight and Cobblemon entity type maps.
- Fixed #773 by checking timed trade resets during base ticks and before opening trade screens.
- Fixed trade reset timing by increasing internal tickers correctly.
- Added time of day and weather conditions for #459.
- Added additional unit and game tests for trade resets, ticker handling and entity attributes.
- Added
Skywatch Scoutas example NPC preset with time of day and weather conditions.
### 6.23.0
- Fixed #774 by migrating isSunBurnTick error to 26.x.
- Fixed #772 by adjusting texture retries with 403 and 404 errors and lowering logging.
- Fixed #770 item rendering for Epic Fight NPCs (Evoker, Pillager, Vindicator and humanoid skins).
- Fixed #769 door loops with NPCs not reliably opening or closing doors.
- Fixed #760 by adding a dialog option and config setting (buttonConditionMode: LOCK or HIDE) to
- Fixed #709 by adding color picker popup for names with 32 colors and/or a manual RGB/hex value.
- Fixed NPC name color being reset when renaming without a specified color by preserving the
- Improved the door movement attributes so "Pass Door" is automatically enabled while "Open Door"
### 6.22.0
- Fixed #766 by passing the full server player context to command execution for better compatibility
- Fixed #764 by adding entity health, npc health conditions and NPC preset
Grukk, the Sparring Post as example for using these conditions.- Fixed #763 by making sure dialog button execution limits are now recorded.
- Fixed #758 by providing a example NPC preset named
One Wish Companion. - Fixed crashes related to 3rd party villager AI reading non-registered brain memories on Easy NPC
- Fixed Dialog buttons are not locked for server-side data as preparation for #760 and #644.
- Fixed #628 by adding conditional dialog opening support / command for better control over when
- Added brain AI for Piglin and Piglin Brute NPCs and registered the full vanilla brain memory set.
- Added additional guns to the gun tag for #757.
- Added a new "Open Dialog (Conditional)" action that opens a named dialog only if its conditions
- Added new entity health and npc health conditions for actions, dialogs and dialogs buttons.
- Added Piglin, Piglin Brute and Zombified Piglin NPCs invulnerable, for consistency with other
- Added a new "Knockback Immunity" combat attribute that prevents the NPC from being knocked back by
- Added a new "Explosion Immunity" combat attribute that makes the NPC immune to explosion damage
- Moved the "Projectile Collision" attribute to the Combat attribute screen, where it fits better
### 6.21.0
- Fixed item attachment for Illagers in crossed-arms pose.
- Fixed broken illager crossbow attack goal.
- Fixed crashes related to 3rd party items which are not renderable as hand items #756.
- Fixed crashes related to 3rd party mixins trying to access non-existing model parts #756.
- Fixed log.info spam message by reducing log verbosity and adding additional checks for custom
- Improved EasyNPCModelManager performance.
- Refactored NPC renderers to remove default hand item layer.
### 6.20.0
- Fixed crashes related to 3rd mods trying to access non-existing NPCs goals.
### 6.19.0
Note: This update adjusted the dialog background images by 10x6 pixels, which may require users to
adjust their custom dialog backgrounds if they are using custom ones.
- Fixed #752, #130 by adding dialog button condition support to allow to disable buttons.
- Fixed #683, #215 by adding typewriter effect support for dialog text.
- Fixed #690, #309 by allowing conditions for dialog, dialog buttons and interactions.
- Fixed smaller UI issues with dialog screen layout and background.
- Refactored dialog background images by 10x6 pixels on each side.
- Refactored dialog screen layout to better fit the new background size and improve appearance.
- Added typewriter effect and client configuration for dialog text.
- Added condition symbols to indicate the condition status for dialog, buttons and interactions.
- Added amount field for item conditions to allow checking for specific amounts of items.
- Added
Threshold Wardenas example NPC preset with various conditions and actions. - Added smaller bug fixes and optimizations related to dialog conditions and button states.
### 6.18.0
Note: This update changes the internal data format for conditions and actions, which may reset /
remove legacy existing execution-limit entries without stored IDs.
- Fixed #745 by adding conditions for actions to allow more complex and dynamic behavior.
- Fixed #652 by adding dialog button tooltip for longer texts.
- Fixed #687 by adding command value tooltip to show the full value.
- Added Experience Level conditions.
- Added Game-mode conditions.
- Added has item in inventory condition.
- Added has item in hand condition with (main hand and off-hand) support.
- Added player health condition.
- Added player tag condition.
- Added player team condition.
- Added Goldmere example NPC preset with various conditions and actions.
- Added negative condition support to allow negating conditions for more complex logic.
- Removed parameter pseudo IDs for
ActionDataEntryand replaced them with random UUIDs. - Refactored condition system to allow more condition types.
### 6.17.0
- Fixed #738 by adding additional tooltips for "Execute as player"
- Fixed to detailed logs by reducing log.info messages during startup and in-game.
- Added additional unit and game-tests.
### 6.16.0
- Fixed #732 by providing option to disable ESC key and close button for dialogs.
- Fixed #723 by avoid auto-close in specific cases like trading screens.
- Added general dialog configuration options to allow users to customize dialog behavior.
- Added avatar scaling and position offset options for dialogs.
- Added missing translation keys.
### 6.15.1
- Fixed #735 by extending the correct base class.
- Fixed several 26.1.2 specific issues from manual spawn testing.
### 6.15.0 (Trades, Player Heads, Epic Fight and QOL updates)
- Fixed #731 by resyncing species data, if species list is empty on the client.
- Fixed #730 by improving Epic Fight integration and enabled experimental features.
- Fixed #729 by making sure trade uses are stored correctly.
- Fixed #728 by adding custom head support for player heads.
- Fixed #689 by showing remaining trade uses and allow resetting manually and automatically.
- Fixed #218 and #132 with new trade configuration screen and better support for custom trades.
- Fixed trade specific edge by switching between basic and normal/advanced trading mode.
- Fixed dialog button text is truncated with tooltip showing the full text.
- Fixed Cobblemon animation issues by syncing animation state with Cobblemon Animation System.
- Added per trade specific actions to allow users triggering actions after buys.
- Added trade reset button to reset all trades easily.
- Added trade usage information to trade configuration screen.
- Added experimental feature state to allow users to manually enable experimental features.
- Added Griselda Grindstone as example trader with actions.
- Cleanup test files.
### 6.14.0
- Fixed #727 by making sure changes are synced to the client when changing values.
- Fixed #726 by adding additional allow lists for specific commands.
- Fixed #686, #389, #304, #211 by adding basic Cobblemon support with Cobblemon NPC.
- Fixed dialog misalignment and navigation issues by adjusting dialog sprites and screens.
- Fixed x and z root rotation by correcting rotation logic and pivot calculations.
- Added basic Cobblemon support with custom NPC type and model for testing.
### 6.13.0 (Security and Permissions Updates)
Notes: This update includes better security checks and permissions for multiplayer environments. It
allows to execute server commands which can be potentially dangerous if used with malicious intent.
- The update splits the model root data and logic from the rest of the model part data and logic,
- Fixed #725 by separating model root data and logic from the rest of the model part data and logic.
- Fixed #722 by supporting .sbnt files as local presets.
- Fixed #675 by adding dedicated assets for dialog and config screen backgrounds.
- Fixed #605, #532, #529 with new security checks and permissions system.
- Fixed #469, #311 by adding experimental api documentation and examples for custom model support.
- Fixed double rendering of config screen background by removing redundant background rendering.
- Fixed Ghast and Slime hitbox and name tag position issues by adjusting bounding box.
- ⚠️ Added security checks to prevent potential exploits and allow safe usage in multiplayer
- Replaced dynamic dialog screen background with a static one for better performance, customization
- Replaced dynamic config screen background with a static one for better performance.
- Refactored config-ui specific components and removed them from the core mod.
- Removed duplicated sprite sheets.
- Prepare permission system for possible Luck Perms integration in the future like #712.
- General code cleanup and optimizations related to config screen rendering and assets.
### 6.12.0
- Fixed #714 by adding additional checks for custom model part list based on vanilla models.
- Fixed #713 by reducing log verbosity with downgraded per-NPC INFO messages to DEBUG and
- Fixed #711 by reduced oversized startup/config log output.
- Fixed NBT validation guard to prevent unnecessary buffer allocations in production.
- Added model part name constants to EasyNPCModelManager for consistent usage across mixins.
- Improved RenderEntityTypeSupportConfig by enhancing filter logic and optimizing data structures
- Removed verbose debug logs that dump large data structures.
### 6.11.1
- Fixed #710 by improving backward-compatible parsing for recoverable trade data.
### 6.11.0
- Fixed #703 rendering issue with new custom layer system and hand renderings.
- Fixed #701 by adding additional safeguards and logging for invalid trading offers.
- Fixed smart animation not working properly with modified head position.
- Fixed head tracking by moving player detection back to server side-only.
- Fixed CustomLookAtPlayerGoal to better handle edge cases and reduce jitter.
- Fixed issue with Doppler NPCs keeping their hand inventory.
- Improved PoseManager logging message.
- Updated logo with a new design.
### 6.10.0
- Fixed #698 by adding try and catch for 3rd party entity creation.
- Fixed #695 by clearing model part rotations/positions when switching to a
DEFAULTvanilla pose. - Fixed #695 by applying lock rotation and pose animation only when the NPC is idle.
- Fixed #695 by correcting root rotation pivot to use actual bounding box height instead of 0.5f.
- Fixed multiple objective registration issues including inverted
isTargetedPlayercheck, wrong
targets.
- Fixed goal reference being retained after objective is unregistered.
- Removed auto-lock of ROOT rotation when loading poses; root lock is now user-controlled.
- Added lock rotation checkbox to the advanced and custom pose configuration screens.
- Added model-specific pose key filtering in
ConfigurationMenuHandlerfor the default pose screen. - Added unit tests for
CustomPosition,CustomRotation,CustomScale,ModelPose,
ModelAnimationBehavior and ModelAnimationData.- Added
NPCDataIsolationTestHelperand game tests for Fabric and Forge. - Increased max head yaw range from 60° to 65°.
### 6.9.0
- Fixed #692, #666 by adding caching and safeguards to prevent redundant retriggering of NPC entity
- Fixed #651, #617 by adding basic custom poses for all supported NPC types.
- Fixed #597 by adding additional Flee goals for fleeing from players, villagers, monsters, ...
- Fixed pose loading to read directly from mod resources instead of copying files to disk.
- Fixed duplicate
saveNPCcalls on entity join by checking existing registry entry first. - Added
despawnandspawncommands to remove and re-spawn NPCs by UUID with configurable removal
- Added
ModelPoseAPIandEasyNPCEntityHandlerpublic API classes for controlling NPC poses and
- Added pose data files for all supported NPC types.
- Added lock rotation checkbox to the basic pose configuration screen.
- Added
MoveToPositionGoalto move an NPC to a position before executing a callback action. - Added
EasyNPCLookControlandEasyNPCBodyRotationControlto respect locked root rotation. - Added synced owner change and dimension change to the NPC entity data index.
- Added EasyNPCItemAttachmentLayer into various entity renderers.
- Added dedicated
Flee Objectiveconfiguration tab with objectives for fleeing creepers, monsters,
- Added
FOLLOW_ITEMobjective to the follow objectives tab to make NPCs follow item entities by
minecraft:apple).- Added
LookAtEntityByUUIDGoaland enabled the look-at-entity-by-UUID and look-at-owner objectives
- Added
persistentflag toSynchedDataIndexso that transient indices (e.g. crossbow charge,
- Added configurable
customParticlesEnabledflag toSlimeBasefor API consumers. - Added
SoundType.PETand mappedCAT_PURRto the cat NPC for tamed ambient sound variety. - Reduced log verbosity for periodic NPC save operations from INFO to DEBUG.
### 6.8.3
- Fixed #680 by enforcing version miss-match by upgrading network protocol version.
- Fixed #679 by resetting position, rotation and size for name tag.
- Fixed #665 by adding multi state slide for root rotations.
- Fixed #664 by adding option to disable following mouse cursor for easier posing.
- Fixed #663 by improve support for X and Z root rotations.
- Fixed #661 by adding quick rotation with NPC wand and sneaking to the NPC to rotate the root to
- Fixed move tool is wrongly triggering interactions by adding check for move tool in interaction
- Fixed Preset Item is wrongly triggering interactions by adding check for preset item in
- Fixed Slime and Ghast hitbox and name tag position issues by adjusting bounding box and eye height
- Fixed Slime and Ghast GUI position by adjusting offset values.
### 6.8.2
- Fixed #677 by extending
SafeMerchantDatawith notifyTrade to avoid crashes. - Added progression data support for leveling up NPCs based on player interactions and actions.
- Added global NPC tracking system for better management and debugging of NPCs across the world.
- Added
OriginalModelConfig.withVariantTexture()option to allow using variant textures with the
### 6.8.1
- Fixed #676 by using existing preset helper method instead of custom one.
### 6.8.0 (Adding API support)
- Fixed #667 by adding warning messages and additional checks for invalid network packets.
- Fixed Horse spawn eggs model.
- Fixed pose support for allay, chicken, creeper, fox, ghast, horse, illager, iron golem, slime and
- Added NPC base classes for better API support.
- Added NPC raw classes for advanced API support.
- Added Slim and Ghast NPC types.
- Added Custom Model API for easier integration with other mods and custom models.
- Refactored internal data handling and registration for better maintainability and future
### 6.7.1
- Fixed #657 and #656 by adding additional client side checks for vanilla bug.
### 6.7.0
- Fixed #650 by implementing Wolf Leg Animations in setupAnim method.
- Fixed #648 by fixing canBeHitByProjectiles translation.
- Fixed #645 by adding
allowBypassInvulnerabilityconfig option to allow/deny bypassing
- Fixed delete button showing label even with small width.
- Fixed up and down buttons not positioned correctly in some cases.
- Fixed name tag showing up for dialog and configuration UI.
- Fixed distance action issue were multiple actions are not properly triggered.
- Fixed issues with NPC presets.
- Fixed Cat NPC and Wolf NPC owner data not syncing properly.
- Added preset browser for easier selection of common NPC presets.
- Added preset .snbt (text) export and import functionality for sharing NPC presets.
- Refactored existing NPC presets to use new .snbt format.
- Refactored spawner system to use new preset format for better maintainability and future
### 6.6.2
- Fixed #643 by rework scaling system.
- Fixed scaling not properly updating hitbox and nametag position after restart / reload.
- Added MID and MOUSE_OVER name tag visibility modes for finer control over NPC name display.
- Added team-based name tag visibility support respecting vanilla Team.
### 6.6.1
- Fixed #638 by refactored internal data handling for display attributes.
### 6.6.0
- Fixed #634 by implementing asynchronous texture loading with dedicated thread pool.
- Fixed texture loading blocking render thread causing game freezes.
- Fixed race conditions in texture reload protection using atomic operations.
- Fixed resource leaks in HTTP connections during remote texture downloads.
- Fixed URL validation spam allowing multiple simultaneous downloads of the same texture.
- Fixed exception handling for remote image validation preventing crashes on invalid URLs.
- Fixed
defineId called for:warning messages during NPC loading. - Refactored texture loading architecture with multi-level defense and rate limiting.
- Refactored entity data registration logic for better maintainability.
- Converted data classes to modern Java records for better immutability and thread-safety.
- Added thread-safe session server spam protection with ConcurrentHashMap.
- Added comprehensive error recovery with automatic cooldown reset on failures.
- Improved texture loading with 2-thread pool and 500ms rate limiting.
- Improved exception handling with specific catch blocks for IIOException and FileNotFoundException.
### 6.5.2
- Fixed Villager profession and job skin issue.
- Improved GitHub workflows by adding cache for gradle dependencies.
- Improved Gradle build time and cleanup tasks.
### 6.5.1
- Fixed #632 by implementing ON_KILL action type and event.
- Fixed #629 by improving texture handling performance, caching, and memory usage.
- Fixed kill command is not working on NPCs.
- Fixed texture reload protection preventing cache reload after eviction.
- Fixed WebP validation bug in remote image validator (missing return statement).
- Refactored texture handling logic for better maintainability and future improvements.
- Added time-based reload protection (60 seconds) to replace permanent blocking mechanism.
- Added missing variant textures for chicken, pig and wolf.
- Added additional unit tests for texture handling.
- Improved gradle build tasks.
### 6.5.0
- ⚠️ Removed jar-in-jar bundle approach for better mod compatibility and api capabilities.
- Fixed #627 scissor implementation for better compatibility with other mods.
- Fixed #625 lively animation issues when using rotated or moved model parts.
- Fixed default animation are canceled when using scaled model parts.
- Added better pose animation control with smart, default und none options.
### 6.4.1
- Fixed #626 screen switching logic for different NPC UUIDs, thanks to
Spawnbladefor the detailed
### 6.4.0
- Fixed #626 by improving dialog data validation and error handling.
- Fixed #623 by refactoring render data and render handling.
- Fixed #622 by making sure custom data are properly saved and loaded.
- Fixed open dialog action type to allow opening dialogs from other NPCs.
- Fixed hashing issues by adding missing equals and hashCode methods for ConditionDataSet and
- Added custom data test item for #622 and easier testing of custom data.
- Improved records and fixed potential issues with missing data.
### 6.3.0
- Refactored config ui specific components and removed them from the core mod.
- Fixed dialog data by filtering dialog data before sending to the client.
- Fixed dialog editor layout issues and improved usability.
- Fixed missing default values for some dialog data fields.
- Added dialog priority support to control the order of dialog execution.
- Added condition support for dialog and scoreboard actions.
- Added frequency support for dialog to limit how often an dialog can be shown.
- Added new NPC preset to for scoreboard and condition support.
- Improved dialog button data format by removing redundant fields.
### 6.2.0
- Fixed legacy custom name parsing.
- Fixed string injection within dialogs.
- Fixed missing translation for action types.
- Added scoreboard action type to increase, decrease, set scoreboard values.
- Added
@score(...)NPC macro to display scoreboard values in the dialog. - Added additional unit tests.
- Improved spin button with indicators and better usability.
### 6.1.2
- Fixed container and menu sync issues with missing close container packets.
- Fixed close button not working in some cases.
- Fixed jumping mouse cursor between screen transitions.
- Fixed translation files and removed duplicate and deprecated entries.
- Moved Easy NPC wand to existing core item tab instead of creating a new one.
- Added cat pose support for different model parts (except tail).
- Improved EasyNPCWand glowing effect performance by disabling it when not needed.
- Improved custom entity detection by excluding non-living entities like displays, makers, throwns
- Improved cat variant handling.
### 6.1.1
- Fixed #615 by checking if item is equipped in one of the hands.
- Fixed #612 by re-validating entity types.
- Fixed #610 by force sync of hat and head layers for specific models.
- Fixed orc textures.
- Fixed cat variant handling for 1.21.5.
- Fixed player render by adjusting render state
skinfield. - Fixed cat renderer by adjusting render state
texturefield. - Fixed position, scaling and rotation preview.
- Fixed Fairy model.
- Improved custom model support and performance, by moving related logic into to client side only.
- Improved caching of player to UUID mappings for player skins.
- Limited change model commands and logic to Doppler NPCs only.
- Added renderEntityRaw method to render NPC as-it-is.
### 6.1.0 ✨
This is a major release. Please back up your worlds and NPC data before updating. This version
contains many improvements, optimizations, and internal changes that are **not fully compatible**
with earlier releases.
⚠️ Breaking changes
- Existing NPCs and their configuration data from versions before 6.1.0 may not load correctly or
- Internal data formats and some behaviors have been refactored to support new use-cases.
🧩 New modular structure
Easy NPC is now split into three separate mods:
- Easy NPC** – Bundle that includes both Core and Configuration UI for a plug‑and‑play experience.
- Easy NPC: Core** – Lightweight runtime and logic for NPCs, with minimal dependencies. Intended
- Easy NPC: Configuration UI** – Standalone configuration interface for creating and editing NPCs.
🎯 Why this change?
- Allows servers and modpacks to ship only the **Core** mod on the server side for a leaner setup.
- Reduces memory usage and load times when the UI is not required everywhere.
- Makes development and testing faster by separating UI and core logic.
[history]: https://github.com/MarkusBordihn/BOs-Easy-NPC/commits/
[upgrade_guide]: https://github.com/MarkusBordihn/BOs-Easy-NPC/wiki/Upgrading
## Note
This change log includes the summarized changes. For the full changelog, please go to
the [GitHub History][history] instead.
Note: Please always back up your world / NPCs before updating to a new version!
Check the [upgrade guide][upgrade_guide] for more information.
### 7.15.0
- Fixed #838 by keeping preset imports silent when run through
/executeor command blocks. - Fixed #380 by applying the NPC limit to the default spawner as well.
- Fixed #849 by allowing resource pack sounds in the sound configuration.
- Fixed #349 by no longer spawning NPCs left-handed at random.
- Fixed #851 by locking dialog buttons per dialog, not across dialogs with the same label.
- Fixed deleted or duplicated NPCs returning, memory leaks and several owner and UI issues.
- Fixed the Epic Fight Wither Skeleton NPC missing its Epic Fight mob patch.
- Fixed off-center inventory screens and their close button overlapping the "Custom" trading tab.
- Fixed scaled Doppler NPCs keeping the full hitbox of the mimicked entity.
- Fixed NPCs on a player's shoulder ignoring their scale and the Doppler's mimicked model.
- Changed requirements: same mod version on client and server, Easy Model Entities 2.5.0+.
- Changed backups of all worlds and killed NPC data to expire after 30 days, see
storage.cfg. - Added "Jump", "Assist Owner" and "Follow Nearest Player" to fix #845, fix #310, fix #761.
- Added an NPC inventory with item pickup and death drops to fix #111, fix #197, fix #543, fix #670.
- Added "Sit on Shoulder", a boss bar and
/easy_npc debug core loglevelto fix #577, fix #219. - Added the "Hold" animation mode, a "Bank Teller" preset and new API methods for addons.
### 7.14.0
- Fixed #846 by keeping custom poses for players who start seeing the NPC later.
- Fixed attribute and trading settings missing for players who start seeing the NPC later.
- Fixed changed max uses, XP and trading type not shown in the trading screens until reload.
- Fixed
/easy_npc sound setchanges not reaching players until the NPC was reloaded. - Added game tests that check NPC poses and settings after respawns and for new players.
### 7.13.0
- Fixed color and formatting tags in dialog button names showing as plain text.
- Fixed the button preview in the editor showing lowercase names as a raw translation key.
- Fixed the "Move EasyNPC" item not working for NPC owners outside of creative mode.
- Fixed
/easy_npc owner setreporting success even when the owner could not be changed. - Fixed the game crashing when the URL or player skin screen showed a skin download error.
- Fixed the preset browser search showing no results after scrolling down the list.
- Changed the network protocol version, so client and server must run the same mod version.
- Added
@initiator,@npcand@score()support to dialog button names to fix #841. - Added automatic client tests with the Client Runtime Interface Toolkit.
- Larger core refactoring and code cleanup.
### 7.12.2
- Fixed the Fairy hitbox being far too small, so its name tag and speech bubble sat in its body.
- Fixed scaled NPCs keeping their old hitbox and eye level, so hits, clicks and looking missed.
- Fixed oversized names, lists and NPC data in network packets being read without any limit.
- Fixed invalid NPC positions, scales, attributes, names and durations from being applied.
- Changed Fairy NPCs to take up the space of their model, so they collide and can be clicked.
- Changed Skeleton, Stray and Bogged NPCs to the vanilla hitbox height, they were slightly short.
- Changed the network protocol version, so client and server must run the same mod version.
### 7.12.1
- Fixed #836 by always showing "Restore", including datapack presets, with a reason tooltip.
- Fixed preset import and export messages missing, wrong or not warning about replaced NPCs.
- Fixed the preset browser reloading on each keystroke, leaking NPCs and clearing the selection.
- Fixed selection box drop-down lists being covered by the checkboxes and labels behind them.
- Fixed the preset list sorting, filter order and layout clipping options in small windows.
- Fixed
/easy_npc preset import datawithout a position importing it as a default preset. - Fixed spawn rate limit leaks, unstable preset IDs and "Spawn New" stacking NPCs on one spot.
- Changed "Restore" to refuse instead of spawning a copy when it is not permitted.
- Added sorting, a match count, reload, auto-close, the NPC ID and tooltips for presets and skins.
- Added
matching <pattern>batch imports with limits, a confirmation and a clickable position.
### 7.12.0
- Fixed #833 by showing Easy NPC Wand outlines only to the wand holder, owner and admins.
- Fixed #834 by adding "Set Home Here" and "Reset Home" buttons to the position configuration.
- Fixed #835 by keeping the NPC ID and position in exported presets, so imports restore the same
- Fixed preset imports and spawn eggs losing the owner's list entry and owner objectives.
- Fixed NPCs restored from an automatic backup losing their owner and becoming ownerless.
- Fixed selection lists showing only their first six entries and hiding the rest.
- Changed importing a preset to update the original NPC at its stored position instead of adding a
- Changed completed trades to play the "Trade completed" sound, which stayed silent before.
- Changed the API dialog call to report an unknown dialog label instead of always reporting success.
- Changed NPCs without arms to carry held items at the head or body instead of hiding them.
- Changed the optional Easy Model Entities dependency to require version 2.4.0 or newer.
- Added a "Sound" configuration with sounds for dialogs, speech, swimming, eating and fall damage.
- Added a searchable sound selection with volume and pitch sliders to the "Sound" configuration.
- Added a "Block Vehicles" option to keep NPCs out of boats, minecarts and modded chairs.
- Added the profession selection to all skin configurations and a new built-in skin per NPC type.
- Added client settings to hide name tags behind walls and
highlightEnabledfor wand outlines. - Added an "Exists" condition operation and API access to NPC movement, actions and presets.
### 7.11.0
- Fixed #828 by no longer freezing the server on logout when NPCs follow or watch the player.
- Fixed #831 by moving routine NPC removal messages to the debug log.
- Fixed #832 by making humanoid NPCs ignore custom player models, animations and poses.
- Fixed hourly NPC backups stuttering on large worlds and retaining timestamps of removed NPCs.
- Fixed hourly NPC backups losing the identity, owner and position of the backed-up NPC.
- Fixed owner-login restoration duplicating, repeatedly restoring, reviving or moving unloaded NPCs.
- Fixed NPC index and file synchronization issues causing lost NPCs, crashes or false warnings.
- Fixed stale NPC data after unloading, avoided redundant writes and added repeated-unload warnings.
- Fixed the preset browser failing to list custom and world presets saved in the SNBT format.
- Fixed speech bubbles losing their text and turning translucent with Iris shaders.
- Fixed the "Opacity" of an NPC being ignored while a shader pack is active.
- Fixed text formatting and macro parsing for translated speech bubbles and mod API texts.
- Fixed speech bubbles and their text staying hidden behind blocks while a shader pack is active.
- Added
minLightLevelto keep speech bubbles readable in dark surroundings.
### 7.10.0
- Fixed #829 by allowing bats and other non-walking mobs as the render entity of a Doppler NPC.
- Fixed the Wandering Trader NPC rendering without its texture.
- Fixed NPCs rendered as a bat, frog or warden showing a static pose instead of their animation.
- Fixed the NPC name tag showing above the previews in the "Custom Models" configuration.
- Fixed speech bubbles being cut off by walls, doorframes and the NPC's own body.
- Fixed the previews in the "Custom Models" configuration.
- Changed the previews in the "Custom Models" configuration to stand on a common ground line.
- Changed overlapping speech bubbles to move apart and to stay visible when the NPC is off-screen.
- Changed "Navigation: Automatic" to use flying movement for NPCs rendered as a flying mob.
- Changed the render entity list to hide seats, paintings, thrown items and other non-mob entities.
- Added a "Min. hover height" slider for flying NPCs and client settings for speech bubbles.
### 7.9.0
- Fixed modded fish NPCs, like the ones of Tide 2, spinning around instead of swimming upright.
- Fixed "Navigation: Automatic" using ground movement for water NPCs and aquatic model NPCs.
- Fixed the "Random Swimming" objective never moving an NPC that uses aquatic navigation.
- Fixed a swimming NPC shaking or twitching in place instead of holding its tilt and swim depth.
- Fixed a swimming NPC turning in circles forever when it could not reach its next path point.
- Fixed an NPC that fell into water never getting out of it again.
- Fixed a following NPC searching a new path every tick while its target was unreachable.
- Fixed the "Move to" actions stopping short of a raised target or not starting while in the air.
- Fixed "Move back to Home" ignoring height differences and never returning from beyond 32 blocks.
- Fixed the "Opacity" input field being too narrow to show a value of 100.
- Fixed a damaged NPC with an Easy Model Entities model never flashing red.
- Changed modded water NPCs to swim level, vanilla water mobs keep their tilt as before.
- Changed the "Move to" actions to walk up to 48 blocks and to teleport only beyond that range.
- Changed "Move to" and "Move back to Home" to give up after three seconds without progress.
- Changed the timeout of a "Move to" action to count real ticks, it ran twice as long before.
- Changed a new "Random Swimming" objective to rank below following, fleeing and attack goals.
- Changed "Opacity" of an NPC with an Easy Model Entities model to be applied by that mod itself.
- Changed the minimum Easy Model Entities version to 2.3.0, older versions disable the integration.
- Added "Depth below surface" and "Height above floor" sliders for the swim level of an NPC.
- Added log entries for the NPC files written on a world save, with a warning above 250 ms each.
### 7.8.1
- Fixed #827 by rendering fish NPCs in water upright instead of always flopping on their side.
- Fixed #828 by keeping a damaged NPC from blocking the world save, it now falls back to defaults.
- Fixed a restored NPC picking up a random preset ID that changed with every save.
- Changed NPC data to only be written to disk when it actually changed.
### 7.8.0
- Fixed smaller text and UI issues.
- Changed an NPC that is already standing at its target position to finish the movement right away.
- Changed the "None" skin tab to "Advanced", which now holds "Disable Skin" and the texture field.
- Changed the minimum Easy Model Entities version to 2.2.0, older versions are no longer accepted.
- Added a "Move to" action, which sends an NPC to a position, a player, its owner or its home.
- Added a "Move to and Wait" action, which runs the following actions only after the arrival.
- Added an arrival radius, a timeout and an optional teleport to both move actions.
- Added an "Opacity" attribute from 0 to 100, which fades body, armor and hand items together.
- Added a "Set Opacity" action, which turns an NPC into a ghost or hides it completely.
- Added the "Lantern Wraith" preset, a ghost walking a square with a short line at every corner.
- Added API access to the move actions and the opacity of an NPC.
- Added a "Resource Location" skin type, which renders any texture of a mod or a resource pack.
- Added an "Advanced" skin tab, which previews the NPC with the entered texture before applying it.
### 7.7.7
- Fixed #821 by keeping the transparency of 64x64 skins, which Fresh Moves needs for its eyes. Skins
- Fixed #818 by running trade actions for Villager and Wandering Trader NPCs as well.
- Fixed a dialog with several text variants switching its speech bubble size every second.
- Fixed the skin cache storing the processed image instead of the original download.
- Fixed the untranslated interval names, like
PER_DAY, of the "Execution Limit" condition. - Fixed the
sitanimation of Easy Model NPCs, which never used the built-in sitting pose. - Fixed the speech bubble being cut off by the head of an NPC when a player stood close to it.
- Changed speech bubbles to keep their screen size and to move down or aside when a player is close.
- Changed the speech bubble text to render 20% larger than a name tag.
- Changed a time based action set with a "Wait" action to run in order instead of picking one entry.
- Changed dialog texts to wrap later, so an existing dialog can switch to the wider screen layout.
- Changed fallback actions to skip screen actions without a player, like the regular actions do.
- Changed the minimum Easy Model Entities version to 2.1.0, older versions disable the integration.
- Added a "Wait" action, which pauses the following actions of an event for a chosen duration.
- Added the "Countdown Timekeeper" preset, a speech bubble count to ten ending in sound and sparks.
- Added scaling and rotation for Doppler NPCs behind the "Experimental Features" checkbox. Both only
- Added a "Sound" action, which plays a sound at the NPC with sound category, volume and pitch.
- Added "Every 5 Minutes" and "Every 15 Minutes" to the "Execution Limit" condition.
- Added a "Player Idle" condition, which checks how long a player has not moved.
- Added an "Immovable" attribute, which keeps an NPC in place against pushing and knockback.
- Added
/easy_npc pauseto pause a single NPC or all NPCs; the global pause ends with the server. - Added API access to the sound action, the pause state and the idle time of a player.
- Added a texture override per model slot for Easy Model NPCs over
/easy_npc render texture. - Added a "Repeat" playback mode with a count and a time limit to the "Play Animation" action.
- Added API access to animation variants, texture slots and textures of Easy Model NPCs.
### 7.6.0
- Fixed unclear mod conflict errors for duplicate entity data tracker IDs.
- Fixed third-party health bars rendering over NPC previews in configuration and dialog screens.
- Fixed Doppler and Easy Model Entities NPCs using default hitboxes instead of their model size.
- Fixed the
/easy_npccommands suggesting no NPC UUIDs at all on a server. - Fixed the pose list of the "Set Pose" action drawing over its input field.
- Fixed the untranslated "Loop", "After current" and "Action Data Type" labels of the action editor.
- Fixed the missing hint text of the "Chance" condition.
- Fixed long condition hints running out of the editor screen instead of wrapping.
- Fixed the misaligned help icons and text buttons of the "Message" action.
- Fixed changes to the "Set Pose", "Play Animation" and "Stop Animation" actions not being saveable.
- Fixed the speech bubble text sitting closer to its upper border than to its lower one.
- Changed the NPC suggestions to list the crosshair NPC first and only own NPCs without permissions.
- Changed a preset export to only store what differs from a new NPC, without position or owner.
- Changed a preset without objectives or actions to fall back to the defaults of its NPC type.
- Changed events without a player, like "On Spawn" or "On Kill", to check their conditions. An
- Changed a time based action to pick the owner as
@initiatorwhenever the owner is nearby. - Changed speech bubbles to stay visible from 5 up to 18 seconds, depending on the text length.
- Changed the "Set Pose" action to only show its input field for the "custom" pose entry.
- Added time based actions on five fixed steps, from every ~1 second up to every ~15 minutes.
- Added a "Message" action for chat, system message and speech bubble text without a command.
- Added text variants, a sender name, a recipient and translation keys to the "Message" action.
- Added the speech bubble graphic as
easy_npc:textures/gui/speech_bubble.pngfor resource packs. - Added a "Chance" condition in percent and a "Relationship" condition for owner and faction.
- Added spawn, owner login, state change, day / night, weather and the missing "On Trade" events.
- Added a base preset per NPC type under
easy_npc:api/preset/base/, usable as a parent preset. - Added the "Wandering Companion" preset, a talkative NPC built from time based messages.
- Added an action registry, an action handler, a preset validator and richer event data for mods.
- Added a tooltip with name, type and distance to every NPC suggestion of the
/easy_npccommands. - Improved the NPC suggestions, which appear without typing and tolerate a near miss of one block.
### 7.5.0
- Fixed #814 by giving every Cobblemon NPC its own animation state instead of one per species.
- Fixed #813 by letting "Move back to Home" work at any distance instead of only near its home.
- Fixed #812 by checking once per session whether a player changed their skin.
- Fixed #810 by accepting Cobblemon aspects of resource packs instead of only "shiny" and "female".
- Fixed the home position of an NPC always reading as unset, which hid "Home" in the configuration
- Fixed NPCs spawned from a preset, the preset browser or a respawn never getting a home position.
- Fixed an NPC spawned from the preset browser keeping the home position of the world the preset was
- Fixed NPCs being drawn as a white silhouette with a shadow in the configuration, skin and preset
- Fixed the server crashing when an NPC with a "Tempt" objective ticked its goals.
- Fixed a single or boss spawner spawning without any limit when its preset carried no stored NPC.
- Fixed the "Legacy Easy NPC Data" warning appearing for newly created NPCs.
- Fixed missing transparency corrections for old 64x32 skins, which showed layer artifacts.
- Fixed the player skin screen freezing for a moment while a player name was looked up.
- Fixed the "Reset look at ..." objective label, which read "Reset loot at ..." in some languages.
- Fixed the "No Gravity" attribute being ignored after a preset import, which let NPCs fall.
- Fixed the Fabric game tests, which crashed on start because of the development helper mods.
- Fixed NPCs losing their owner when they were spawned again after a despawn.
- Fixed objectives being deleted from an NPC when the mod providing them was missing at start.
- Fixed importing a preset without a stored id, which spawned an NPC without owner and home.
- Fixed "Follow owner" and "Look at owner" keeping their old target after the owner was changed.
- Fixed attack targets staying assigned to an NPC after the targeted entity was gone.
- Fixed the "Look at Item" objective, which could be stored but never did anything.
- Fixed walking animation for Doppler NPC and 3rd party models.
- Fixed Forge never running its server start-up step, which left NPC tracking, factions and the
- Fixed Forge development runs starting without any mixins, which disabled the vanilla entity
- Changed the movement objectives to a fixed order: flee, follow, return home, then stroll. NPCs
- Changed inserting a preset into a vanilla monster spawner to keep its delay, count and range.
- Changed "Follow owner" and "Look at owner" without a chosen target to follow the owner of the NPC.
- Changed datapack presets to
easy_npc/preset/, the old folder still works, but only for easy_npc. - Changed the preset browser to always list its entries in the same order.
- Removed the experimental user-defined NPCs; the extra config file is no longer read or created.
- Removed the unused
SERVER_SKINskin type. - Added a new game test structure to support game tests in 1.21.11 and higher.
- Added a reload button to each entry of the player skin screen, to fetch a single skin again.
- Added the reason to the log whenever an NPC is removed, so an unexpected despawn can be traced.
- Added suggestions to
/easy_npc render set species. - Added support for presets from other mods, which no longer have to use the
easy_npcnamespace. - Added a preset visibility that hides a preset from the preset browser and the NPC screens.
- Added a teleport distance and a resting spot offset to the follow objectives.
- Added item tags, a "can be scared" option and a "only without owner" option to "Follow item".
- Added an item field to the look objectives, so an NPC can watch a chosen dropped item.
- Added an identifier per NPC, so a mod can find its own NPCs again.
- Added an option to spawn an NPC again when its owner logs in.
- Added game tests for NeoForge, which had none, and restored the spawn egg, dialog screen, data
- Added game tests for every configuration and editor screen, covering all three mod loaders.
- Added game tests for the home position, covering the spawn default, the stored value and
- Improved the model name parsing, which mistook a species ending in "_shiny" for a variant.
- Improved following of flying NPCs, which now steer directly when there is no path through the air.
- Improved third party support with an API for presets, own objectives and objective configuration.
### 7.4.0
- Fixed #807 by no longer pulling every same-type NPC within 32 blocks into a "Defend Self" fight.
- Fixed #805 by evaluating all visibility settings together instead of stopping at the first one.
- Fixed #804 by keeping the custom name on Doppler NPCs for name based textures and the name tag.
- Fixed #803 by adjusting assets to match typical Minecraft style instead of generic UI style.
- Fixed the day and night detection, which counted sunrise as night and sunset as day.
- Fixed the visibility in the Nether and the End, which used the Overworld time.
- Fixed the time and game mode visibility checkboxes appearing in a random order.
- Fixed game tests only being able to fail on their first assertion, which hid later failures.
- Fixed the "Saddled" horse skin variants, which never showed a saddle.
- Changed "Visible to Owner" and "Visible to Team" to also follow day, night and game mode.
- Changed Evoker, Illusioner and Vindicator variants without "Crossed Arms" to keep their arms down.
- Added a "Defend Faction" objective that attacks whoever hurt a nearby faction member or player.
- Added a system message when faction members fight each other and the faction stays out of it.
- Added a head equipment slot for Illagers so their captain banner can be removed or swapped.
- Added a day and night preview to the display configuration screen.
- Added unit and game tests for the visibility attributes and the faction defense.
- Improved the visibility check performance by reading the display attributes only once per check.
- Improved display attributes from older versions by completing them with their defaults.
- Improved the attack objective screen by disabling "Protect Owner" and "Defend Faction" when unset.
### 7.3.0
- Improved skin variants by carrying their data as typed fields instead of parsing variant names.
- Centralized the Cobblemon mod id and default model on shared constants.
- Reduced duplicated enum code with a shared
EnumUtilshelper forget(String)lookups. - Optimized villager profession and type lookups to use direct registry keys instead of scans.
- Optimized enum name lookups by caching tag names, ids and keys once at construction.
- Added unit and game tests for skin variants, villager resolution and the enum helper.
### 7.1.2
- Fixed #801 by using combination for NPC, Dialog and Action UUIDs to avoid collisions for action
### 7.1.1
- Fixed #800 by lazy loading entity types.
- Fixed #799 by fixing edge cases and adding additional documentation and better log messages.
- Fixed #798 by considering console, commands and command blocks as trusted command sources.
- Fixed a critical single-player / LAN issue where client and server NPCs shared the same registry.
- Fixed a memory leak in the configuration menu handling and added timeout and disconnect cleanup.
- Fixed duplicate downloads when several NPCs request the same skin at the same time.
- Fixed skin lookups failing after a error so a slow server no longer freezes the game.
- Fixed the URL skin screen freezing the game while checking a remote image; the check now runs in
- Added a new World Spawner block that limits an NPC preset across the whole world (all dimensions),
- Hardened remote skin downloads with a strict size limit and safe redirect handling to prevent
blockPrivateAddresses setting.- Improved server performance by only sending entity and player load events to NPCs that actually
### 7.0.0
- Fixed #794 by using the expected type for NPC rendering.
- Fixed scaling screen preview by pinning the entity feet to the 0 line of the scale ruler, so NPCs
box updates.
- Fixed #791 by adding Wandering Trader NPC type.
- Fixed #788 by extending the AI safeguards to Epic Fight and raw NPC variants (Piglin, Villager,
- Fixed #787, #531, #237 and #184 by adding a faction system with
/easy_npc factioncommands,
- Fixed #787, #771 and #572 by adding a new
targetobjectives tab to attack hostile factions or
- Fixed #786 by adding gender and shiny model variants for Cobblemon NPCs, searchable via
female
shiny in the model selection.- Fixed faction combat between invulnerable NPCs by adding the new
Attackable by Factionscombat
- Fixed Cobblemon model selection previews for oversized species by scaling with Cobblemon's own
- Fixed faction management edge cases by validating faction names, sorting faction lists and
- Fixed custom skin reloads by loading and clearing texture caches per skin model instead of always
- Improved the
Attackable by Players/Monsters/Factionscombat attributes to work independently of
Invulnerable, each opening a targeted hole for its own attacker group.- Improved preset command and network handling by splitting the large handlers into smaller focused
- Added Easy Model Entities Support.
- Added faction manager and faction editor screens to create, color and delete factions and manage
FACTION_MANAGEMENT security feature.- Added new
Miscattributes tab as home for the NPC faction assignment. - Added reusable warning and help icon components for inline hints with tooltips.
- Added additional unit and game tests for factions, target objectives and Cobblemon model variants.
### 6.25.0
- Fixed #782, #636, #622 by preserving data components during validations.
- Fixed #780 by caching remote texture downloads and reducing duplicate registrations.
- Fixed #767 by clamping attribute sliders against extreme values from other mods.
- Fixed #754 by adding custom data item matching for NPCs with actions and conditions.
- Fixed texture manager running in the wrong thread may cause crashes and deadlocks in >= 1.21.x.
- Fixed empty UUID handling for action conditions.
- Fixed execution limit reset for actions.
- Added texture registration queue to avoid multiple simultaneous downloads in the same tick.
- Added NPC coin, key and red token as consumable items for NPCs with actions and conditions.
- Added
Welcome Coin Traderas example NPC preset with custom coin, key and red token item data. - Added attribute safeguards against extreme values from other mods.
- Increased fallback max health value from 1024 to 4096 for high-health NPCs.
- Improved texture manager by reducing duplicate texture checks and registrations.
### 6.24.0
- Fixed #459, #775 by adding an option to block interactions with invisible NPCs.
- Fixed #774 startup crash related to optional Epic Fight and Cobblemon entity type maps.
- Fixed #773 by checking timed trade resets during base ticks and before opening trade screens.
- Fixed trade reset timing by increasing internal tickers correctly.
- Added time of day and weather conditions for #459.
- Added additional unit and game tests for trade resets, ticker handling and entity attributes.
- Added
Skywatch Scoutas example NPC preset with time of day and weather conditions.
### 6.23.0
- Fixed #774 by migrating isSunBurnTick error to 26.x.
- Fixed #772 by adjusting texture retries with 403 and 404 errors and lowering logging.
- Fixed #770 item rendering for Epic Fight NPCs (Evoker, Pillager, Vindicator and humanoid skins).
- Fixed #769 door loops with NPCs not reliably opening or closing doors.
- Fixed #760 by adding a dialog option and config setting (buttonConditionMode: LOCK or HIDE) to
- Fixed #709 by adding color picker popup for names with 32 colors and/or a manual RGB/hex value.
- Fixed NPC name color being reset when renaming without a specified color by preserving the
- Improved the door movement attributes so "Pass Door" is automatically enabled while "Open Door"
### 6.22.0
- Fixed #766 by passing the full server player context to command execution for better compatibility
- Fixed #764 by adding entity health, npc health conditions and NPC preset
Grukk, the Sparring Post as example for using these conditions.- Fixed #763 by making sure dialog button execution limits are now recorded.
- Fixed #758 by providing a example NPC preset named
One Wish Companion. - Fixed crashes related to 3rd party villager AI reading non-registered brain memories on Easy NPC
- Fixed Dialog buttons are not locked for server-side data as preparation for #760 and #644.
- Fixed #628 by adding conditional dialog opening support / command for better control over when
- Added brain AI for Piglin and Piglin Brute NPCs and registered the full vanilla brain memory set.
- Added additional guns to the gun tag for #757.
- Added a new "Open Dialog (Conditional)" action that opens a named dialog only if its conditions
- Added new entity health and npc health conditions for actions, dialogs and dialogs buttons.
- Added Piglin, Piglin Brute and Zombified Piglin NPCs invulnerable, for consistency with other
- Added a new "Knockback Immunity" combat attribute that prevents the NPC from being knocked back by
- Added a new "Explosion Immunity" combat attribute that makes the NPC immune to explosion damage
- Moved the "Projectile Collision" attribute to the Combat attribute screen, where it fits better
### 6.21.0
- Fixed item attachment for Illagers in crossed-arms pose.
- Fixed broken illager crossbow attack goal.
- Fixed crashes related to 3rd party items which are not renderable as hand items #756.
- Fixed crashes related to 3rd party mixins trying to access non-existing model parts #756.
- Fixed log.info spam message by reducing log verbosity and adding additional checks for custom
- Improved EasyNPCModelManager performance.
- Refactored NPC renderers to remove default hand item layer.
### 6.20.0
- Fixed crashes related to 3rd mods trying to access non-existing NPCs goals.
### 6.19.0
Note: This update adjusted the dialog background images by 10x6 pixels, which may require users to
adjust their custom dialog backgrounds if they are using custom ones.
- Fixed #752, #130 by adding dialog button condition support to allow to disable buttons.
- Fixed #683, #215 by adding typewriter effect support for dialog text.
- Fixed #690, #309 by allowing conditions for dialog, dialog buttons and interactions.
- Fixed smaller UI issues with dialog screen layout and background.
- Refactored dialog background images by 10x6 pixels on each side.
- Refactored dialog screen layout to better fit the new background size and improve appearance.
- Added typewriter effect and client configuration for dialog text.
- Added condition symbols to indicate the condition status for dialog, buttons and interactions.
- Added amount field for item conditions to allow checking for specific amounts of items.
- Added
Threshold Wardenas example NPC preset with various conditions and actions. - Added smaller bug fixes and optimizations related to dialog conditions and button states.
### 6.18.0
Note: This update changes the internal data format for conditions and actions, which may reset /
remove legacy existing execution-limit entries without stored IDs.
- Fixed #745 by adding conditions for actions to allow more complex and dynamic behavior.
- Fixed #652 by adding dialog button tooltip for longer texts.
- Fixed #687 by adding command value tooltip to show the full value.
- Added Experience Level conditions.
- Added Game-mode conditions.
- Added has item in inventory condition.
- Added has item in hand condition with (main hand and off-hand) support.
- Added player health condition.
- Added player tag condition.
- Added player team condition.
- Added Goldmere example NPC preset with various conditions and actions.
- Added negative condition support to allow negating conditions for more complex logic.
- Removed parameter pseudo IDs for
ActionDataEntryand replaced them with random UUIDs. - Refactored condition system to allow more condition types.
### 6.17.0
- Fixed #738 by adding additional tooltips for "Execute as player"
- Fixed to detailed logs by reducing log.info messages during startup and in-game.
- Added additional unit and game-tests.
### 6.16.0
- Fixed #732 by providing option to disable ESC key and close button for dialogs.
- Fixed #723 by avoid auto-close in specific cases like trading screens.
- Added general dialog configuration options to allow users to customize dialog behavior.
- Added avatar scaling and position offset options for dialogs.
- Added missing translation keys.
### 6.15.1
- Fixed #735 by extending the correct base class.
- Fixed several 26.1.2 specific issues from manual spawn testing.
### 6.15.0 (Trades, Player Heads, Epic Fight and QOL updates)
- Fixed #731 by resyncing species data, if species list is empty on the client.
- Fixed #730 by improving Epic Fight integration and enabled experimental features.
- Fixed #729 by making sure trade uses are stored correctly.
- Fixed #728 by adding custom head support for player heads.
- Fixed #689 by showing remaining trade uses and allow resetting manually and automatically.
- Fixed #218 and #132 with new trade configuration screen and better support for custom trades.
- Fixed trade specific edge by switching between basic and normal/advanced trading mode.
- Fixed dialog button text is truncated with tooltip showing the full text.
- Fixed Cobblemon animation issues by syncing animation state with Cobblemon Animation System.
- Added per trade specific actions to allow users triggering actions after buys.
- Added trade reset button to reset all trades easily.
- Added trade usage information to trade configuration screen.
- Added experimental feature state to allow users to manually enable experimental features.
- Added Griselda Grindstone as example trader with actions.
- Cleanup test files.
### 6.14.0
- Fixed #727 by making sure changes are synced to the client when changing values.
- Fixed #726 by adding additional allow lists for specific commands.
- Fixed #686, #389, #304, #211 by adding basic Cobblemon support with Cobblemon NPC.
- Fixed dialog misalignment and navigation issues by adjusting dialog sprites and screens.
- Fixed x and z root rotation by correcting rotation logic and pivot calculations.
- Added basic Cobblemon support with custom NPC type and model for testing.
### 6.13.0 (Security and Permissions Updates)
Notes: This update includes better security checks and permissions for multiplayer environments. It
allows to execute server commands which can be potentially dangerous if used with malicious intent.
- The update splits the model root data and logic from the rest of the model part data and logic,
- Fixed #725 by separating model root data and logic from the rest of the model part data and logic.
- Fixed #722 by supporting .sbnt files as local presets.
- Fixed #675 by adding dedicated assets for dialog and config screen backgrounds.
- Fixed #605, #532, #529 with new security checks and permissions system.
- Fixed #469, #311 by adding experimental api documentation and examples for custom model support.
- Fixed double rendering of config screen background by removing redundant background rendering.
- Fixed Ghast and Slime hitbox and name tag position issues by adjusting bounding box.
- ⚠️ Added security checks to prevent potential exploits and allow safe usage in multiplayer
- Replaced dynamic dialog screen background with a static one for better performance, customization
- Replaced dynamic config screen background with a static one for better performance.
- Refactored config-ui specific components and removed them from the core mod.
- Removed duplicated sprite sheets.
- Prepare permission system for possible Luck Perms integration in the future like #712.
- General code cleanup and optimizations related to config screen rendering and assets.
### 6.12.0
- Fixed #714 by adding additional checks for custom model part list based on vanilla models.
- Fixed #713 by reducing log verbosity with downgraded per-NPC INFO messages to DEBUG and
- Fixed #711 by reduced oversized startup/config log output.
- Fixed NBT validation guard to prevent unnecessary buffer allocations in production.
- Added model part name constants to EasyNPCModelManager for consistent usage across mixins.
- Improved RenderEntityTypeSupportConfig by enhancing filter logic and optimizing data structures
- Removed verbose debug logs that dump large data structures.
### 6.11.1
- Fixed #710 by improving backward-compatible parsing for recoverable trade data.
### 6.11.0
- Fixed #703 rendering issue with new custom layer system and hand renderings.
- Fixed #701 by adding additional safeguards and logging for invalid trading offers.
- Fixed smart animation not working properly with modified head position.
- Fixed head tracking by moving player detection back to server side-only.
- Fixed CustomLookAtPlayerGoal to better handle edge cases and reduce jitter.
- Fixed issue with Doppler NPCs keeping their hand inventory.
- Improved PoseManager logging message.
- Updated logo with a new design.
### 6.10.0
- Fixed #698 by adding try and catch for 3rd party entity creation.
- Fixed #695 by clearing model part rotations/positions when switching to a
DEFAULTvanilla pose. - Fixed #695 by applying lock rotation and pose animation only when the NPC is idle.
- Fixed #695 by correcting root rotation pivot to use actual bounding box height instead of 0.5f.
- Fixed multiple objective registration issues including inverted
isTargetedPlayercheck, wrong
targets.
- Fixed goal reference being retained after objective is unregistered.
- Removed auto-lock of ROOT rotation when loading poses; root lock is now user-controlled.
- Added lock rotation checkbox to the advanced and custom pose configuration screens.
- Added model-specific pose key filtering in
ConfigurationMenuHandlerfor the default pose screen. - Added unit tests for
CustomPosition,CustomRotation,CustomScale,ModelPose,
ModelAnimationBehavior and ModelAnimationData.- Added
NPCDataIsolationTestHelperand game tests for Fabric and Forge. - Increased max head yaw range from 60° to 65°.
### 6.9.0
- Fixed #692, #666 by adding caching and safeguards to prevent redundant retriggering of NPC entity
- Fixed #651, #617 by adding basic custom poses for all supported NPC types.
- Fixed #597 by adding additional Flee goals for fleeing from players, villagers, monsters, ...
- Fixed pose loading to read directly from mod resources instead of copying files to disk.
- Fixed duplicate
saveNPCcalls on entity join by checking existing registry entry first. - Added
despawnandspawncommands to remove and re-spawn NPCs by UUID with configurable removal
- Added
ModelPoseAPIandEasyNPCEntityHandlerpublic API classes for controlling NPC poses and
- Added pose data files for all supported NPC types.
- Added lock rotation checkbox to the basic pose configuration screen.
- Added
MoveToPositionGoalto move an NPC to a position before executing a callback action. - Added
EasyNPCLookControlandEasyNPCBodyRotationControlto respect locked root rotation. - Added synced owner change and dimension change to the NPC entity data index.
- Added EasyNPCItemAttachmentLayer into various entity renderers.
- Added dedicated
Flee Objectiveconfiguration tab with objectives for fleeing creepers, monsters,
- Added
FOLLOW_ITEMobjective to the follow objectives tab to make NPCs follow item entities by
minecraft:apple).- Added
LookAtEntityByUUIDGoaland enabled the look-at-entity-by-UUID and look-at-owner objectives
- Added
persistentflag toSynchedDataIndexso that transient indices (e.g. crossbow charge,
- Added configurable
customParticlesEnabledflag toSlimeBasefor API consumers. - Added
SoundType.PETand mappedCAT_PURRto the cat NPC for tamed ambient sound variety. - Reduced log verbosity for periodic NPC save operations from INFO to DEBUG.
### 6.8.3
- Fixed #680 by enforcing version miss-match by upgrading network protocol version.
- Fixed #679 by resetting position, rotation and size for name tag.
- Fixed #665 by adding multi state slide for root rotations.
- Fixed #664 by adding option to disable following mouse cursor for easier posing.
- Fixed #663 by improve support for X and Z root rotations.
- Fixed #661 by adding quick rotation with NPC wand and sneaking to the NPC to rotate the root to
- Fixed move tool is wrongly triggering interactions by adding check for move tool in interaction
- Fixed Preset Item is wrongly triggering interactions by adding check for preset item in
- Fixed Slime and Ghast hitbox and name tag position issues by adjusting bounding box and eye height
- Fixed Slime and Ghast GUI position by adjusting offset values.
### 6.8.2
- Fixed #677 by extending
SafeMerchantDatawith notifyTrade to avoid crashes. - Added progression data support for leveling up NPCs based on player interactions and actions.
- Added global NPC tracking system for better management and debugging of NPCs across the world.
- Added
OriginalModelConfig.withVariantTexture()option to allow using variant textures with the
### 6.8.1
- Fixed #676 by using existing preset helper method instead of custom one.
### 6.8.0 (Adding API support)
- Fixed #667 by adding warning messages and additional checks for invalid network packets.
- Fixed Horse spawn eggs model.
- Fixed pose support for allay, chicken, creeper, fox, ghast, horse, illager, iron golem, slime and
- Added NPC base classes for better API support.
- Added NPC raw classes for advanced API support.
- Added Slim and Ghast NPC types.
- Added Custom Model API for easier integration with other mods and custom models.
- Refactored internal data handling and registration for better maintainability and future
### 6.7.1
- Fixed #657 and #656 by adding additional client side checks for vanilla bug.
### 6.7.0
- Fixed #650 by implementing Wolf Leg Animations in setupAnim method.
- Fixed #648 by fixing canBeHitByProjectiles translation.
- Fixed #645 by adding
allowBypassInvulnerabilityconfig option to allow/deny bypassing
- Fixed delete button showing label even with small width.
- Fixed up and down buttons not positioned correctly in some cases.
- Fixed name tag showing up for dialog and configuration UI.
- Fixed distance action issue were multiple actions are not properly triggered.
- Fixed issues with NPC presets.
- Fixed Cat NPC and Wolf NPC owner data not syncing properly.
- Added preset browser for easier selection of common NPC presets.
- Added preset .snbt (text) export and import functionality for sharing NPC presets.
- Refactored existing NPC presets to use new .snbt format.
- Refactored spawner system to use new preset format for better maintainability and future
### 6.6.2
- Fixed #643 by rework scaling system.
- Fixed scaling not properly updating hitbox and nametag position after restart / reload.
- Added MID and MOUSE_OVER name tag visibility modes for finer control over NPC name display.
- Added team-based name tag visibility support respecting vanilla Team.
### 6.6.1
- Fixed #638 by refactored internal data handling for display attributes.
### 6.6.0
- Fixed #634 by implementing asynchronous texture loading with dedicated thread pool.
- Fixed texture loading blocking render thread causing game freezes.
- Fixed race conditions in texture reload protection using atomic operations.
- Fixed resource leaks in HTTP connections during remote texture downloads.
- Fixed URL validation spam allowing multiple simultaneous downloads of the same texture.
- Fixed exception handling for remote image validation preventing crashes on invalid URLs.
- Fixed
defineId called for:warning messages during NPC loading. - Refactored texture loading architecture with multi-level defense and rate limiting.
- Refactored entity data registration logic for better maintainability.
- Converted data classes to modern Java records for better immutability and thread-safety.
- Added thread-safe session server spam protection with ConcurrentHashMap.
- Added comprehensive error recovery with automatic cooldown reset on failures.
- Improved texture loading with 2-thread pool and 500ms rate limiting.
- Improved exception handling with specific catch blocks for IIOException and FileNotFoundException.
### 6.5.2
- Fixed Villager profession and job skin issue.
- Improved GitHub workflows by adding cache for gradle dependencies.
- Improved Gradle build time and cleanup tasks.
### 6.5.1
- Fixed #632 by implementing ON_KILL action type and event.
- Fixed #629 by improving texture handling performance, caching, and memory usage.
- Fixed kill command is not working on NPCs.
- Fixed texture reload protection preventing cache reload after eviction.
- Fixed WebP validation bug in remote image validator (missing return statement).
- Refactored texture handling logic for better maintainability and future improvements.
- Added time-based reload protection (60 seconds) to replace permanent blocking mechanism.
- Added missing variant textures for chicken, pig and wolf.
- Added additional unit tests for texture handling.
- Improved gradle build tasks.
### 6.5.0
- ⚠️ Removed jar-in-jar bundle approach for better mod compatibility and api capabilities.
- Fixed #627 scissor implementation for better compatibility with other mods.
- Fixed #625 lively animation issues when using rotated or moved model parts.
- Fixed default animation are canceled when using scaled model parts.
- Added better pose animation control with smart, default und none options.
### 6.4.1
- Fixed #626 screen switching logic for different NPC UUIDs, thanks to
Spawnbladefor the detailed
### 6.4.0
- Fixed #626 by improving dialog data validation and error handling.
- Fixed #623 by refactoring render data and render handling.
- Fixed #622 by making sure custom data are properly saved and loaded.
- Fixed open dialog action type to allow opening dialogs from other NPCs.
- Fixed hashing issues by adding missing equals and hashCode methods for ConditionDataSet and
- Added custom data test item for #622 and easier testing of custom data.
- Improved records and fixed potential issues with missing data.
### 6.3.0
- Refactored config ui specific components and removed them from the core mod.
- Fixed dialog data by filtering dialog data before sending to the client.
- Fixed dialog editor layout issues and improved usability.
- Fixed missing default values for some dialog data fields.
- Added dialog priority support to control the order of dialog execution.
- Added condition support for dialog and scoreboard actions.
- Added frequency support for dialog to limit how often an dialog can be shown.
- Added new NPC preset to for scoreboard and condition support.
- Improved dialog button data format by removing redundant fields.
### 6.2.0
- Fixed legacy custom name parsing.
- Fixed string injection within dialogs.
- Fixed missing translation for action types.
- Added scoreboard action type to increase, decrease, set scoreboard values.
- Added
@score(...)NPC macro to display scoreboard values in the dialog. - Added additional unit tests.
- Improved spin button with indicators and better usability.
### 6.1.2
- Fixed container and menu sync issues with missing close container packets.
- Fixed close button not working in some cases.
- Fixed jumping mouse cursor between screen transitions.
- Fixed translation files and removed duplicate and deprecated entries.
- Moved Easy NPC wand to existing core item tab instead of creating a new one.
- Added cat pose support for different model parts (except tail).
- Improved EasyNPCWand glowing effect performance by disabling it when not needed.
- Improved custom entity detection by excluding non-living entities like displays, makers, throwns
- Improved cat variant handling.
### 6.1.1
- Fixed #615 by checking if item is equipped in one of the hands.
- Fixed #612 by re-validating entity types.
- Fixed #610 by force sync of hat and head layers for specific models.
- Fixed orc textures.
- Fixed cat variant handling for 1.21.5.
- Fixed player render by adjusting render state
skinfield. - Fixed cat renderer by adjusting render state
texturefield. - Fixed position, scaling and rotation preview.
- Fixed Fairy model.
- Improved custom model support and performance, by moving related logic into to client side only.
- Improved caching of player to UUID mappings for player skins.
- Limited change model commands and logic to Doppler NPCs only.
- Added renderEntityRaw method to render NPC as-it-is.
### 6.1.0 ✨
This is a major release. Please back up your worlds and NPC data before updating. This version
contains many improvements, optimizations, and internal changes that are **not fully compatible**
with earlier releases.
⚠️ Breaking changes
- Existing NPCs and their configuration data from versions before 6.1.0 may not load correctly or
- Internal data formats and some behaviors have been refactored to support new use-cases.
🧩 New modular structure
Easy NPC is now split into three separate mods:
- Easy NPC** – Bundle that includes both Core and Configuration UI for a plug‑and‑play experience.
- Easy NPC: Core** – Lightweight runtime and logic for NPCs, with minimal dependencies. Intended
- Easy NPC: Configuration UI** – Standalone configuration interface for creating and editing NPCs.
🎯 Why this change?
- Allows servers and modpacks to ship only the **Core** mod on the server side for a leaner setup.
- Reduces memory usage and load times when the UI is not required everywhere.
- Makes development and testing faster by separating UI and core logic.
[history]: https://github.com/MarkusBordihn/BOs-Easy-NPC/commits/
[upgrade_guide]: https://github.com/MarkusBordihn/BOs-Easy-NPC/wiki/Upgrading
## Note
This change log includes the summarized changes. For the full changelog, please go to
the [GitHub History][history] instead.
Note: Please always back up your world / NPCs before updating to a new version!
Check the [upgrade guide][upgrade_guide] for more information.
### 7.15.0
- Fixed #838 by keeping preset imports silent when run through
/executeor command blocks. - Fixed #380 by applying the NPC limit to the default spawner as well.
- Fixed #849 by allowing resource pack sounds in the sound configuration.
- Fixed #349 by no longer spawning NPCs left-handed at random.
- Fixed #851 by locking dialog buttons per dialog, not across dialogs with the same label.
- Fixed deleted or duplicated NPCs returning, memory leaks and several owner and UI issues.
- Fixed the Epic Fight Wither Skeleton NPC missing its Epic Fight mob patch.
- Fixed off-center inventory screens and their close button overlapping the "Custom" trading tab.
- Fixed scaled Doppler NPCs keeping the full hitbox of the mimicked entity.
- Fixed NPCs on a player's shoulder ignoring their scale and the Doppler's mimicked model.
- Changed requirements: same mod version on client and server, Easy Model Entities 2.5.0+.
- Changed backups of all worlds and killed NPC data to expire after 30 days, see
storage.cfg. - Added "Jump", "Assist Owner" and "Follow Nearest Player" to fix #845, fix #310, fix #761.
- Added an NPC inventory with item pickup and death drops to fix #111, fix #197, fix #543, fix #670.
- Added "Sit on Shoulder", a boss bar and
/easy_npc debug core loglevelto fix #577, fix #219. - Added the "Hold" animation mode, a "Bank Teller" preset and new API methods for addons.
### 7.14.0
- Fixed #846 by keeping custom poses for players who start seeing the NPC later.
- Fixed attribute and trading settings missing for players who start seeing the NPC later.
- Fixed changed max uses, XP and trading type not shown in the trading screens until reload.
- Fixed
/easy_npc sound setchanges not reaching players until the NPC was reloaded. - Added game tests that check NPC poses and settings after respawns and for new players.
### 7.13.0
- Fixed color and formatting tags in dialog button names showing as plain text.
- Fixed the button preview in the editor showing lowercase names as a raw translation key.
- Fixed the "Move EasyNPC" item not working for NPC owners outside of creative mode.
- Fixed
/easy_npc owner setreporting success even when the owner could not be changed. - Fixed the game crashing when the URL or player skin screen showed a skin download error.
- Fixed the preset browser search showing no results after scrolling down the list.
- Changed the network protocol version, so client and server must run the same mod version.
- Added
@initiator,@npcand@score()support to dialog button names to fix #841. - Added automatic client tests with the Client Runtime Interface Toolkit.
- Larger core refactoring and code cleanup.
### 7.12.2
- Fixed the Fairy hitbox being far too small, so its name tag and speech bubble sat in its body.
- Fixed scaled NPCs keeping their old hitbox and eye level, so hits, clicks and looking missed.
- Fixed oversized names, lists and NPC data in network packets being read without any limit.
- Fixed invalid NPC positions, scales, attributes, names and durations from being applied.
- Changed Fairy NPCs to take up the space of their model, so they collide and can be clicked.
- Changed Skeleton, Stray and Bogged NPCs to the vanilla hitbox height, they were slightly short.
- Changed the network protocol version, so client and server must run the same mod version.
### 7.12.1
- Fixed #836 by always showing "Restore", including datapack presets, with a reason tooltip.
- Fixed preset import and export messages missing, wrong or not warning about replaced NPCs.
- Fixed the preset browser reloading on each keystroke, leaking NPCs and clearing the selection.
- Fixed selection box drop-down lists being covered by the checkboxes and labels behind them.
- Fixed the preset list sorting, filter order and layout clipping options in small windows.
- Fixed
/easy_npc preset import datawithout a position importing it as a default preset. - Fixed spawn rate limit leaks, unstable preset IDs and "Spawn New" stacking NPCs on one spot.
- Changed "Restore" to refuse instead of spawning a copy when it is not permitted.
- Added sorting, a match count, reload, auto-close, the NPC ID and tooltips for presets and skins.
- Added
matching <pattern>batch imports with limits, a confirmation and a clickable position.
### 7.12.0
- Fixed #833 by showing Easy NPC Wand outlines only to the wand holder, owner and admins.
- Fixed #834 by adding "Set Home Here" and "Reset Home" buttons to the position configuration.
- Fixed #835 by keeping the NPC ID and position in exported presets, so imports restore the same
- Fixed preset imports and spawn eggs losing the owner's list entry and owner objectives.
- Fixed NPCs restored from an automatic backup losing their owner and becoming ownerless.
- Fixed selection lists showing only their first six entries and hiding the rest.
- Changed importing a preset to update the original NPC at its stored position instead of adding a
- Changed completed trades to play the "Trade completed" sound, which stayed silent before.
- Changed the API dialog call to report an unknown dialog label instead of always reporting success.
- Changed NPCs without arms to carry held items at the head or body instead of hiding them.
- Changed the optional Easy Model Entities dependency to require version 2.4.0 or newer.
- Added a "Sound" configuration with sounds for dialogs, speech, swimming, eating and fall damage.
- Added a searchable sound selection with volume and pitch sliders to the "Sound" configuration.
- Added a "Block Vehicles" option to keep NPCs out of boats, minecarts and modded chairs.
- Added the profession selection to all skin configurations and a new built-in skin per NPC type.
- Added client settings to hide name tags behind walls and
highlightEnabledfor wand outlines. - Added an "Exists" condition operation and API access to NPC movement, actions and presets.
### 7.11.0
- Fixed #828 by no longer freezing the server on logout when NPCs follow or watch the player.
- Fixed #831 by moving routine NPC removal messages to the debug log.
- Fixed #832 by making humanoid NPCs ignore custom player models, animations and poses.
- Fixed hourly NPC backups stuttering on large worlds and retaining timestamps of removed NPCs.
- Fixed hourly NPC backups losing the identity, owner and position of the backed-up NPC.
- Fixed owner-login restoration duplicating, repeatedly restoring, reviving or moving unloaded NPCs.
- Fixed NPC index and file synchronization issues causing lost NPCs, crashes or false warnings.
- Fixed stale NPC data after unloading, avoided redundant writes and added repeated-unload warnings.
- Fixed the preset browser failing to list custom and world presets saved in the SNBT format.
- Fixed speech bubbles losing their text and turning translucent with Iris shaders.
- Fixed the "Opacity" of an NPC being ignored while a shader pack is active.
- Fixed text formatting and macro parsing for translated speech bubbles and mod API texts.
- Fixed speech bubbles and their text staying hidden behind blocks while a shader pack is active.
- Added
minLightLevelto keep speech bubbles readable in dark surroundings.
### 7.10.0
- Fixed #829 by allowing bats and other non-walking mobs as the render entity of a Doppler NPC.
- Fixed NPCs rendered as a bat, frog or warden showing a static pose instead of their animation.
- Fixed the NPC name tag showing above the previews in the "Custom Models" configuration.
- Fixed speech bubbles being cut off by walls, doorframes and the NPC's own body.
- Fixed the previews in the "Custom Models" configuration.
- Changed the previews in the "Custom Models" configuration to stand on a common ground line.
- Changed overlapping speech bubbles to move apart and to stay visible when the NPC is off-screen.
- Changed "Navigation: Automatic" to use flying movement for NPCs rendered as a flying mob.
- Changed the render entity list to hide seats, paintings, thrown items and other non-mob entities.
- Added a "Min. hover height" slider for flying NPCs and client settings for speech bubbles.
### 7.9.0
- Fixed modded fish NPCs, like the ones of Tide 2, spinning around instead of swimming upright.
- Fixed "Navigation: Automatic" using ground movement for water NPCs and aquatic model NPCs.
- Fixed the "Random Swimming" objective never moving an NPC that uses aquatic navigation.
- Fixed a swimming NPC shaking or twitching in place instead of holding its tilt and swim depth.
- Fixed a swimming NPC turning in circles forever when it could not reach its next path point.
- Fixed an NPC that fell into water never getting out of it again.
- Fixed a following NPC searching a new path every tick while its target was unreachable.
- Fixed the "Move to" actions stopping short of a raised target or not starting while in the air.
- Fixed "Move back to Home" ignoring height differences and never returning from beyond 32 blocks.
- Fixed the "Opacity" input field being too narrow to show a value of 100.
- Fixed a damaged NPC with an Easy Model Entities model never flashing red.
- Changed modded water NPCs to swim level, vanilla water mobs keep their tilt as before.
- Changed the "Move to" actions to walk up to 48 blocks and to teleport only beyond that range.
- Changed "Move to" and "Move back to Home" to give up after three seconds without progress.
- Changed the timeout of a "Move to" action to count real ticks, it ran twice as long before.
- Changed a new "Random Swimming" objective to rank below following, fleeing and attack goals.
- Changed "Opacity" of an NPC with an Easy Model Entities model to be applied by that mod itself.
- Changed the minimum Easy Model Entities version to 2.3.0, older versions disable the integration.
- Added "Depth below surface" and "Height above floor" sliders for the swim level of an NPC.
- Added log entries for the NPC files written on a world save, with a warning above 250 ms each.
### 7.8.1
- Fixed #827 by rendering fish NPCs in water upright instead of always flopping on their side.
- Fixed #828 by keeping a damaged NPC from blocking the world save, it now falls back to defaults.
- Fixed a restored NPC picking up a random preset ID that changed with every save.
- Changed NPC data to only be written to disk when it actually changed.
### 7.8.0
- Fixed smaller text and UI issues.
- Changed an NPC that is already standing at its target position to finish the movement right away.
- Changed the "None" skin tab to "Advanced", which now holds "Disable Skin" and the texture field.
- Changed the minimum Easy Model Entities version to 2.2.0, older versions are no longer accepted.
- Added a "Move to" action, which sends an NPC to a position, a player, its owner or its home.
- Added a "Move to and Wait" action, which runs the following actions only after the arrival.
- Added an arrival radius, a timeout and an optional teleport to both move actions.
- Added an "Opacity" attribute from 0 to 100, which fades body, armor and hand items together.
- Added a "Set Opacity" action, which turns an NPC into a ghost or hides it completely.
- Added the "Lantern Wraith" preset, a ghost walking a square with a short line at every corner.
- Added API access to the move actions and the opacity of an NPC.
- Added a "Resource Location" skin type, which renders any texture of a mod or a resource pack.
- Added an "Advanced" skin tab, which previews the NPC with the entered texture before applying it.
### 7.7.7
- Fixed #821 by keeping the transparency of 64x64 skins, which Fresh Moves needs for its eyes. Skins
- Fixed #818 by running trade actions for Villager and Wandering Trader NPCs as well.
- Fixed a dialog with several text variants switching its speech bubble size every second.
- Fixed the skin cache storing the processed image instead of the original download.
- Fixed the untranslated interval names, like
PER_DAY, of the "Execution Limit" condition. - Fixed the
sitanimation of Easy Model NPCs, which never used the built-in sitting pose. - Fixed the speech bubble being cut off by the head of an NPC when a player stood close to it.
- Changed speech bubbles to keep their screen size and to move down or aside when a player is close.
- Changed the speech bubble text to render 20% larger than a name tag.
- Changed a time based action set with a "Wait" action to run in order instead of picking one entry.
- Changed dialog texts to wrap later, so an existing dialog can switch to the wider screen layout.
- Changed fallback actions to skip screen actions without a player, like the regular actions do.
- Changed the minimum Easy Model Entities version to 2.1.0, older versions disable the integration.
- Added a "Wait" action, which pauses the following actions of an event for a chosen duration.
- Added the "Countdown Timekeeper" preset, a speech bubble count to ten ending in sound and sparks.
- Added scaling and rotation for Doppler NPCs behind the "Experimental Features" checkbox. Both only
- Added a "Sound" action, which plays a sound at the NPC with sound category, volume and pitch.
- Added "Every 5 Minutes" and "Every 15 Minutes" to the "Execution Limit" condition.
- Added a "Player Idle" condition, which checks how long a player has not moved.
- Added an "Immovable" attribute, which keeps an NPC in place against pushing and knockback.
- Added
/easy_npc pauseto pause a single NPC or all NPCs; the global pause ends with the server. - Added API access to the sound action, the pause state and the idle time of a player.
- Added a texture override per model slot for Easy Model NPCs over
/easy_npc render texture. - Added a "Repeat" playback mode with a count and a time limit to the "Play Animation" action.
- Added API access to animation variants, texture slots and textures of Easy Model NPCs.
### 7.6.0
- Fixed unclear mod conflict errors for duplicate entity data tracker IDs.
- Fixed third-party health bars rendering over NPC previews in configuration and dialog screens.
- Fixed Doppler and Easy Model Entities NPCs using default hitboxes instead of their model size.
- Fixed the
/easy_npccommands suggesting no NPC UUIDs at all on a server. - Fixed the pose list of the "Set Pose" action drawing over its input field.
- Fixed the untranslated "Loop", "After current" and "Action Data Type" labels of the action editor.
- Fixed the missing hint text of the "Chance" condition.
- Fixed long condition hints running out of the editor screen instead of wrapping.
- Fixed the misaligned help icons and text buttons of the "Message" action.
- Fixed changes to the "Set Pose", "Play Animation" and "Stop Animation" actions not being saveable.
- Fixed the speech bubble text sitting closer to its upper border than to its lower one.
- Changed the NPC suggestions to list the crosshair NPC first and only own NPCs without permissions.
- Changed a preset export to only store what differs from a new NPC, without position or owner.
- Changed a preset without objectives or actions to fall back to the defaults of its NPC type.
- Changed events without a player, like "On Spawn" or "On Kill", to check their conditions. An
- Changed a time based action to pick the owner as
@initiatorwhenever the owner is nearby. - Changed speech bubbles to stay visible from 5 up to 18 seconds, depending on the text length.
- Changed the "Set Pose" action to only show its input field for the "custom" pose entry.
- Added time based actions on five fixed steps, from every ~1 second up to every ~15 minutes.
- Added a "Message" action for chat, system message and speech bubble text without a command.
- Added text variants, a sender name, a recipient and translation keys to the "Message" action.
- Added the speech bubble graphic as
easy_npc:textures/gui/speech_bubble.pngfor resource packs. - Added a "Chance" condition in percent and a "Relationship" condition for owner and faction.
- Added spawn, owner login, state change, day / night, weather and the missing "On Trade" events.
- Added a base preset per NPC type under
easy_npc:api/preset/base/, usable as a parent preset. - Added the "Wandering Companion" preset, a talkative NPC built from time based messages.
- Added an action registry, an action handler, a preset validator and richer event data for mods.
- Added a tooltip with name, type and distance to every NPC suggestion of the
/easy_npccommands. - Improved the NPC suggestions, which appear without typing and tolerate a near miss of one block.
### 7.5.0
- Fixed the home position of an NPC always reading as unset, which hid "Home" in the configuration
- Fixed NPCs spawned from a preset, the preset browser or a respawn never getting a home position.
- Fixed an NPC spawned from the preset browser keeping the home position of the world the preset was
- Fixed NPCs being drawn as a white silhouette with a shadow in the configuration, skin and preset
- Fixed #814 by giving every Cobblemon NPC its own animation state instead of one per species.
- Fixed #813 by letting "Move back to Home" work at any distance instead of only near its home.
- Fixed #812 by checking once per session whether a player changed their skin.
- Fixed #810 by accepting Cobblemon aspects of resource packs instead of only "shiny" and "female".
- Fixed the server crashing when an NPC with a "Tempt" objective ticked its goals.
- Fixed a single or boss spawner spawning without any limit when its preset carried no stored NPC.
- Fixed the "Legacy Easy NPC Data" warning appearing for newly created NPCs.
- Fixed missing transparency corrections for old 64x32 skins, which showed layer artifacts.
- Fixed the player skin screen freezing for a moment while a player name was looked up.
- Fixed the "Reset look at ..." objective label, which read "Reset loot at ..." in some languages.
- Fixed the "No Gravity" attribute being ignored after a preset import, which let NPCs fall.
- Fixed the Fabric game tests, which crashed on start because of the development helper mods.
- Fixed NPCs losing their owner when they were spawned again after a despawn.
- Fixed objectives being deleted from an NPC when the mod providing them was missing at start.
- Fixed importing a preset without a stored id, which spawned an NPC without owner and home.
- Fixed "Follow owner" and "Look at owner" keeping their old target after the owner was changed.
- Fixed attack targets staying assigned to an NPC after the targeted entity was gone.
- Fixed the "Look at Item" objective, which could be stored but never did anything.
- Fixed walking animation for Doppler NPC and 3rd party models.
- Fixed Forge never running its server start-up step, which left NPC tracking, factions and the
- Fixed Forge development runs starting without any mixins, which disabled the vanilla entity
- Changed the movement objectives to a fixed order: flee, follow, return home, then stroll. NPCs
- Changed inserting a preset into a vanilla monster spawner to keep its delay, count and range.
- Changed "Follow owner" and "Look at owner" without a chosen target to follow the owner of the NPC.
- Changed datapack presets to
easy_npc/preset/, the old folder still works, but only for easy_npc. - Changed the preset browser to always list its entries in the same order.
- Removed the experimental user-defined NPCs; the extra config file is no longer read or created.
- Removed the unused
SERVER_SKINskin type. - Added new gametest strcuture to support gametest in 1.21.11 and higher.
- Added a reload button to each entry of the player skin screen, to fetch a single skin again.
- Added the reason to the log whenever an NPC is removed, so an unexpected despawn can be traced.
- Added suggestions to
/easy_npc render set species. - Added support for presets from other mods, which no longer have to use the
easy_npcnamespace. - Added a preset visibility that hides a preset from the preset browser and the NPC screens.
- Added a teleport distance and a resting spot offset to the follow objectives.
- Added item tags, a "can be scared" option and a "only without owner" option to "Follow item".
- Added an item field to the look objectives, so an NPC can watch a chosen dropped item.
- Added an identifier per NPC, so a mod can find its own NPCs again.
- Added an option to spawn an NPC again when its owner logs in.
- Added game tests for NeoForge, which had none, and restored the spawn egg, dialog screen, data
- Added game tests for every configuration and editor screen, covering all three mod loaders.
- Added game tests for the home position, covering the spawn default, the stored value and
- Improved the model name parsing, which mistook a species ending in "_shiny" for a variant.
- Improved following of flying NPCs, which now steer directly when there is no path through the air.
- Improved third party support with an API for presets, own objectives and objective configuration.
### 7.4.0
- Fixed #807 by no longer pulling every same-type NPC within 32 blocks into a "Defend Self" fight.
- Fixed #805 by evaluating all visibility settings together instead of stopping at the first one.
- Fixed #804 by keeping the custom name on Doppler NPCs for name based textures and the name tag.
- Fixed #803 by adjusting assets to match typical Minecraft style instead of generic UI style.
- Fixed the day and night detection, which counted sunrise as night and sunset as day.
- Fixed the visibility in the Nether and the End, which used the Overworld time.
- Fixed the time and game mode visibility checkboxes appearing in a random order.
- Fixed game tests only being able to fail on their first assertion, which hid later failures.
- Fixed the "Saddled" horse skin variants, which never showed a saddle.
- Changed "Visible to Owner" and "Visible to Team" to also follow day, night and game mode.
- Changed Evoker, Illusioner and Vindicator variants without "Crossed Arms" to keep their arms down.
- Added a "Defend Faction" objective that attacks whoever hurt a nearby faction member or player.
- Added a system message when faction members fight each other and the faction stays out of it.
- Added a head equipment slot for Illagers so their captain banner can be removed or swapped.
- Added a day and night preview to the display configuration screen.
- Added unit and game tests for the visibility attributes and the faction defense.
- Improved the visibility check performance by reading the display attributes only once per check.
- Improved display attributes from older versions by completing them with their defaults.
- Improved the attack objective screen by disabling "Protect Owner" and "Defend Faction" when unset.
### 7.3.0
- Improved skin variants by carrying their data as typed fields instead of parsing variant names.
- Centralized the Cobblemon mod id and default model on shared constants.
- Reduced duplicated enum code with a shared
EnumUtilshelper forget(String)lookups. - Optimized villager profession and type lookups to use direct registry keys instead of scans.
- Optimized enum name lookups by caching tag names, ids and keys once at construction.
- Added unit and game tests for skin variants, villager resolution and the enum helper.
### 7.1.2
- Fixed #801 by using combination for NPC, Dialog and Action UUIDs to avoid collisions for action
### 7.1.1
- Fixed #800 by lazy loading entity types.
- Fixed #799 by fixing edge cases and adding additional documentation and better log messages.
- Fixed #798 by considering console, commands and command blocks as trusted command sources.
- Fixed a critical single-player / LAN issue where client and server NPCs shared the same registry.
- Fixed a memory leak in the configuration menu handling and added timeout and disconnect cleanup.
- Fixed duplicate downloads when several NPCs request the same skin at the same time.
- Fixed skin lookups failing after a error so a slow server no longer freezes the game.
- Fixed the URL skin screen freezing the game while checking a remote image; the check now runs in
- Added a new World Spawner block that limits an NPC preset across the whole world (all dimensions),
- Hardened remote skin downloads with a strict size limit and safe redirect handling to prevent
blockPrivateAddresses setting.- Improved server performance by only sending entity and player load events to NPCs that actually
### 7.0.0
- Fixed #794 by using the expected type for NPC rendering.
- Fixed scaling screen preview by pinning the entity feet to the 0 line of the scale ruler, so NPCs
box updates.
- Fixed #791 by adding Wandering Trader NPC type.
- Fixed #788 by extending the AI safeguards to Epic Fight and raw NPC variants (Piglin, Villager,
- Fixed #787, #531, #237 and #184 by adding a faction system with
/easy_npc factioncommands,
- Fixed #787, #771 and #572 by adding a new
targetobjectives tab to attack hostile factions or
- Fixed #786 by adding gender and shiny model variants for Cobblemon NPCs, searchable via
female
shiny in the model selection.- Fixed faction combat between invulnerable NPCs by adding the new
Attackable by Factionscombat
- Fixed Cobblemon model selection previews for oversized species by scaling with Cobblemon's own
- Fixed faction management edge cases by validating faction names, sorting faction lists and
- Fixed custom skin reloads by loading and clearing texture caches per skin model instead of always
- Improved the
Attackable by Players/Monsters/Factionscombat attributes to work independently of
Invulnerable, each opening a targeted hole for its own attacker group.- Improved preset command and network handling by splitting the large handlers into smaller focused
- Added Easy Model Entities Support.
- Added faction manager and faction editor screens to create, color and delete factions and manage
FACTION_MANAGEMENT security feature.- Added new
Miscattributes tab as home for the NPC faction assignment. - Added reusable warning and help icon components for inline hints with tooltips.
- Added additional unit and game tests for factions, target objectives and Cobblemon model variants.
### 6.25.0
- Fixed #782, #636, #622 by preserving data components during validations.
- Fixed #780 by caching remote texture downloads and reducing duplicate registrations.
- Fixed #767 by clamping attribute sliders against extreme values from other mods.
- Fixed #754 by adding custom data item matching for NPCs with actions and conditions.
- Fixed texture manager running in the wrong thread may cause crashes and deadlocks in >= 1.21.x.
- Fixed empty UUID handling for action conditions.
- Fixed execution limit reset for actions.
- Added texture registration queue to avoid multiple simultaneous downloads in the same tick.
- Added NPC coin, key and red token as consumable items for NPCs with actions and conditions.
- Added
Welcome Coin Traderas example NPC preset with custom coin, key and red token item data. - Added attribute safeguards against extreme values from other mods.
- Increased fallback max health value from 1024 to 4096 for high-health NPCs.
- Improved texture manager by reducing duplicate texture checks and registrations.
### 6.24.0
- Fixed #459, #775 by adding an option to block interactions with invisible NPCs.
- Fixed #774 startup crash related to optional Epic Fight and Cobblemon entity type maps.
- Fixed #773 by checking timed trade resets during base ticks and before opening trade screens.
- Fixed trade reset timing by increasing internal tickers correctly.
- Added time of day and weather conditions for #459.
- Added additional unit and game tests for trade resets, ticker handling and entity attributes.
- Added
Skywatch Scoutas example NPC preset with time of day and weather conditions.
### 6.23.0
- Fixed #774 by migrating isSunBurnTick error to 26.x.
- Fixed #772 by adjusting texture retries with 403 and 404 errors and lowering logging.
- Fixed #770 item rendering for Epic Fight NPCs (Evoker, Pillager, Vindicator and humanoid skins).
- Fixed #769 door loops with NPCs not reliably opening or closing doors.
- Fixed #760 by adding a dialog option and config setting (buttonConditionMode: LOCK or HIDE) to
- Fixed #709 by adding color picker popup for names with 32 colors and/or a manual RGB/hex value.
- Fixed NPC name color being reset when renaming without a specified color by preserving the
- Improved the door movement attributes so "Pass Door" is automatically enabled while "Open Door"
### 6.22.0
- Fixed #766 by passing the full server player context to command execution for better compatibility
- Fixed #764 by adding entity health, npc health conditions and NPC preset
Grukk, the Sparring Post as example for using these conditions.- Fixed #763 by making sure dialog button execution limits are now recorded.
- Fixed #758 by providing a example NPC preset named
One Wish Companion. - Fixed crashes related to 3rd party villager AI reading non-registered brain memories on Easy NPC
- Fixed Dialog buttons are not locked for server-side data as preparation for #760 and #644.
- Fixed #628 by adding conditional dialog opening support / command for better control over when
- Added brain AI for Piglin and Piglin Brute NPCs and registered the full vanilla brain memory set.
- Added additional guns to the gun tag for #757.
- Added a new "Open Dialog (Conditional)" action that opens a named dialog only if its conditions
- Added new entity health and npc health conditions for actions, dialogs and dialogs buttons.
- Added Piglin, Piglin Brute and Zombified Piglin NPCs invulnerable, for consistency with other
- Added a new "Knockback Immunity" combat attribute that prevents the NPC from being knocked back by
- Added a new "Explosion Immunity" combat attribute that makes the NPC immune to explosion damage
- Moved the "Projectile Collision" attribute to the Combat attribute screen, where it fits better
### 6.21.0
- Fixed item attachment for Illagers in crossed-arms pose.
- Fixed broken illager crossbow attack goal.
- Fixed crashes related to 3rd party items which are not renderable as hand items #756.
- Fixed crashes related to 3rd party mixins trying to access non-existing model parts #756.
- Fixed log.info spam message by reducing log verbosity and adding additional checks for custom
- Improved EasyNPCModelManager performance.
- Refactored NPC renderers to remove default hand item layer.
### 6.20.0
- Fixed crashes related to 3rd mods trying to access non-existing NPCs goals.
### 6.19.0
Note: This update adjusted the dialog background images by 10x6 pixels, which may require users to
adjust their custom dialog backgrounds if they are using custom ones.
- Fixed #752, #130 by adding dialog button condition support to allow to disable buttons.
- Fixed #683, #215 by adding typewriter effect support for dialog text.
- Fixed #690, #309 by allowing conditions for dialog, dialog buttons and interactions.
- Fixed smaller UI issues with dialog screen layout and background.
- Refactored dialog background images by 10x6 pixels on each side.
- Refactored dialog screen layout to better fit the new background size and improve appearance.
- Added typewriter effect and client configuration for dialog text.
- Added condition symbols to indicate the condition status for dialog, buttons and interactions.
- Added amount field for item conditions to allow checking for specific amounts of items.
- Added
Threshold Wardenas example NPC preset with various conditions and actions. - Added smaller bug fixes and optimizations related to dialog conditions and button states.
### 6.18.0
Note: This update changes the internal data format for conditions and actions, which may reset /
remove legacy existing execution-limit entries without stored IDs.
- Fixed #745 by adding conditions for actions to allow more complex and dynamic behavior.
- Fixed #652 by adding dialog button tooltip for longer texts.
- Fixed #687 by adding command value tooltip to show the full value.
- Added Experience Level conditions.
- Added Game-mode conditions.
- Added has item in inventory condition.
- Added has item in hand condition with (main hand and off-hand) support.
- Added player health condition.
- Added player tag condition.
- Added player team condition.
- Added Goldmere example NPC preset with various conditions and actions.
- Added negative condition support to allow negating conditions for more complex logic.
- Removed parameter pseudo IDs for
ActionDataEntryand replaced them with random UUIDs. - Refactored condition system to allow more condition types.
### 6.17.0
- Fixed #738 by adding additional tooltips for "Execute as player"
- Fixed to detailed logs by reducing log.info messages during startup and in-game.
- Added additional unit and game-tests.
### 6.16.0
- Fixed #732 by providing option to disable ESC key and close button for dialogs.
- Fixed #723 by avoid auto-close in specific cases like trading screens.
- Added general dialog configuration options to allow users to customize dialog behavior.
- Added avatar scaling and position offset options for dialogs.
- Added missing translation keys.
### 6.15.1
- Fixed #735 by extending the correct base class.
- Fixed several 26.1.2 specific issues from manual spawn testing.
### 6.15.0 (Trades, Player Heads, Epic Fight and QOL updates)
- Fixed #731 by resyncing species data, if species list is empty on the client.
- Fixed #730 by improving Epic Fight integration and enabled experimental features.
- Fixed #729 by making sure trade uses are stored correctly.
- Fixed #728 by adding custom head support for player heads.
- Fixed #689 by showing remaining trade uses and allow resetting manually and automatically.
- Fixed #218 and #132 with new trade configuration screen and better support for custom trades.
- Fixed trade specific edge by switching between basic and normal/advanced trading mode.
- Fixed dialog button text is truncated with tooltip showing the full text.
- Fixed Cobblemon animation issues by syncing animation state with Cobblemon Animation System.
- Added per trade specific actions to allow users triggering actions after buys.
- Added trade reset button to reset all trades easily.
- Added trade usage information to trade configuration screen.
- Added experimental feature state to allow users to manually enable experimental features.
- Added Griselda Grindstone as example trader with actions.
- Cleanup test files.
### 6.14.0
- Fixed #727 by making sure changes are synced to the client when changing values.
- Fixed #726 by adding additional allow lists for specific commands.
- Fixed #686, #389, #304, #211 by adding basic Cobblemon support with Cobblemon NPC.
- Fixed dialog misalignment and navigation issues by adjusting dialog sprites and screens.
- Fixed x and z root rotation by correcting rotation logic and pivot calculations.
- Added basic Cobblemon support with custom NPC type and model for testing.
### 6.13.0 (Security and Permissions Updates)
Notes: This update includes better security checks and permissions for multiplayer environments. It
allows to execute server commands which can be potentially dangerous if used with malicious intent.
- The update splits the model root data and logic from the rest of the model part data and logic,
- Fixed #725 by separating model root data and logic from the rest of the model part data and logic.
- Fixed #722 by supporting .sbnt files as local presets.
- Fixed #675 by adding dedicated assets for dialog and config screen backgrounds.
- Fixed #605, #532, #529 with new security checks and permissions system.
- Fixed #469, #311 by adding experimental api documentation and examples for custom model support.
- Fixed double rendering of config screen background by removing redundant background rendering.
- Fixed Ghast and Slime hitbox and name tag position issues by adjusting bounding box.
- ⚠️ Added security checks to prevent potential exploits and allow safe usage in multiplayer
- Replaced dynamic dialog screen background with a static one for better performance, customization
- Replaced dynamic config screen background with a static one for better performance.
- Refactored config-ui specific components and removed them from the core mod.
- Removed duplicated sprite sheets.
- Prepare permission system for possible Luck Perms integration in the future like #712.
- General code cleanup and optimizations related to config screen rendering and assets.
### 6.12.0
- Fixed #714 by adding additional checks for custom model part list based on vanilla models.
- Fixed #713 by reducing log verbosity with downgraded per-NPC INFO messages to DEBUG and
- Fixed #711 by reduced oversized startup/config log output.
- Fixed NBT validation guard to prevent unnecessary buffer allocations in production.
- Added model part name constants to EasyNPCModelManager for consistent usage across mixins.
- Improved RenderEntityTypeSupportConfig by enhancing filter logic and optimizing data structures
- Removed verbose debug logs that dump large data structures.
### 6.11.1
- Fixed #710 by improving backward-compatible parsing for recoverable trade data.
### 6.11.0
- Fixed #703 rendering issue with new custom layer system and hand renderings.
- Fixed #701 by adding additional safeguards and logging for invalid trading offers.
- Fixed smart animation not working properly with modified head position.
- Fixed head tracking by moving player detection back to server side-only.
- Fixed CustomLookAtPlayerGoal to better handle edge cases and reduce jitter.
- Fixed issue with Doppler NPCs keeping their hand inventory.
- Improved PoseManager logging message.
- Updated logo with a new design.
### 6.10.0
- Fixed #698 by adding try and catch for 3rd party entity creation.
- Fixed #695 by clearing model part rotations/positions when switching to a
DEFAULTvanilla pose. - Fixed #695 by applying lock rotation and pose animation only when the NPC is idle.
- Fixed #695 by correcting root rotation pivot to use actual bounding box height instead of 0.5f.
- Fixed multiple objective registration issues including inverted
isTargetedPlayercheck, wrong
targets.
- Fixed goal reference being retained after objective is unregistered.
- Removed auto-lock of ROOT rotation when loading poses; root lock is now user-controlled.
- Added lock rotation checkbox to the advanced and custom pose configuration screens.
- Added model-specific pose key filtering in
ConfigurationMenuHandlerfor the default pose screen. - Added unit tests for
CustomPosition,CustomRotation,CustomScale,ModelPose,
ModelAnimationBehavior and ModelAnimationData.- Added
NPCDataIsolationTestHelperand game tests for Fabric and Forge. - Increased max head yaw range from 60° to 65°.
### 6.9.0
- Fixed #692, #666 by adding caching and safeguards to prevent redundant retriggering of NPC entity
- Fixed #651, #617 by adding basic custom poses for all supported NPC types.
- Fixed #597 by adding additional Flee goals for fleeing from players, villagers, monsters, ...
- Fixed pose loading to read directly from mod resources instead of copying files to disk.
- Fixed duplicate
saveNPCcalls on entity join by checking existing registry entry first. - Added
despawnandspawncommands to remove and re-spawn NPCs by UUID with configurable removal
- Added
ModelPoseAPIandEasyNPCEntityHandlerpublic API classes for controlling NPC poses and
- Added pose data files for all supported NPC types.
- Added lock rotation checkbox to the basic pose configuration screen.
- Added
MoveToPositionGoalto move an NPC to a position before executing a callback action. - Added
EasyNPCLookControlandEasyNPCBodyRotationControlto respect locked root rotation. - Added synced owner change and dimension change to the NPC entity data index.
- Added EasyNPCItemAttachmentLayer into various entity renderers.
- Added dedicated
Flee Objectiveconfiguration tab with objectives for fleeing creepers, monsters,
- Added
FOLLOW_ITEMobjective to the follow objectives tab to make NPCs follow item entities by
minecraft:apple).- Added
LookAtEntityByUUIDGoaland enabled the look-at-entity-by-UUID and look-at-owner objectives
- Added
persistentflag toSynchedDataIndexso that transient indices (e.g. crossbow charge,
- Added configurable
customParticlesEnabledflag toSlimeBasefor API consumers. - Added
SoundType.PETand mappedCAT_PURRto the cat NPC for tamed ambient sound variety. - Reduced log verbosity for periodic NPC save operations from INFO to DEBUG.
### 6.8.3
- Fixed #680 by enforcing version miss-match by upgrading network protocol version.
- Fixed #679 by resetting position, rotation and size for name tag.
- Fixed #665 by adding multi state slide for root rotations.
- Fixed #664 by adding option to disable following mouse cursor for easier posing.
- Fixed #663 by improve support for X and Z root rotations.
- Fixed #661 by adding quick rotation with NPC wand and sneaking to the NPC to rotate the root to
- Fixed move tool is wrongly triggering interactions by adding check for move tool in interaction
- Fixed Preset Item is wrongly triggering interactions by adding check for preset item in
- Fixed Slime and Ghast hitbox and name tag position issues by adjusting bounding box and eye height
- Fixed Slime and Ghast GUI position by adjusting offset values.
### 6.8.2
- Fixed #677 by extending
SafeMerchantDatawith notifyTrade to avoid crashes. - Added progression data support for leveling up NPCs based on player interactions and actions.
- Added global NPC tracking system for better management and debugging of NPCs across the world.
- Added
OriginalModelConfig.withVariantTexture()option to allow using variant textures with the
### 6.8.1
- Fixed #676 by using existing preset helper method instead of custom one.
### 6.8.0 (Adding API support)
- Fixed #667 by adding warning messages and additional checks for invalid network packets.
- Fixed Horse spawn eggs model.
- Fixed pose support for allay, chicken, creeper, fox, ghast, horse, illager, iron golem, slime and
- Added NPC base classes for better API support.
- Added NPC raw classes for advanced API support.
- Added Slim and Ghast NPC types.
- Added Custom Model API for easier integration with other mods and custom models.
- Refactored internal data handling and registration for better maintainability and future
### 6.7.1
- Fixed #657 and #656 by adding additional client side checks for vanilla bug.
### 6.7.0
- Fixed #650 by implementing Wolf Leg Animations in setupAnim method.
- Fixed #648 by fixing canBeHitByProjectiles translation.
- Fixed #645 by adding
allowBypassInvulnerabilityconfig option to allow/deny bypassing
- Fixed delete button showing label even with small width.
- Fixed up and down buttons not positioned correctly in some cases.
- Fixed name tag showing up for dialog and configuration UI.
- Fixed distance action issue were multiple actions are not properly triggered.
- Fixed issues with NPC presets.
- Fixed Cat NPC and Wolf NPC owner data not syncing properly.
- Added preset browser for easier selection of common NPC presets.
- Added preset .snbt (text) export and import functionality for sharing NPC presets.
- Refactored existing NPC presets to use new .snbt format.
- Refactored spawner system to use new preset format for better maintainability and future
### 6.6.2
- Fixed #643 by rework scaling system.
- Fixed scaling not properly updating hitbox and nametag position after restart / reload.
- Added MID and MOUSE_OVER name tag visibility modes for finer control over NPC name display.
- Added team-based name tag visibility support respecting vanilla Team.
### 6.6.1
- Fixed #638 by refactored internal data handling for display attributes.
### 6.6.0
- Fixed #634 by implementing asynchronous texture loading with dedicated thread pool.
- Fixed texture loading blocking render thread causing game freezes.
- Fixed race conditions in texture reload protection using atomic operations.
- Fixed resource leaks in HTTP connections during remote texture downloads.
- Fixed URL validation spam allowing multiple simultaneous downloads of the same texture.
- Fixed exception handling for remote image validation preventing crashes on invalid URLs.
- Fixed
defineId called for:warning messages during NPC loading. - Refactored texture loading architecture with multi-level defense and rate limiting.
- Refactored entity data registration logic for better maintainability.
- Converted data classes to modern Java records for better immutability and thread-safety.
- Added thread-safe session server spam protection with ConcurrentHashMap.
- Added comprehensive error recovery with automatic cooldown reset on failures.
- Improved texture loading with 2-thread pool and 500ms rate limiting.
- Improved exception handling with specific catch blocks for IIOException and FileNotFoundException.
### 6.5.2
- Fixed Villager profession and job skin issue.
- Improved GitHub workflows by adding cache for gradle dependencies.
- Improved Gradle build time and cleanup tasks.
### 6.5.1
- Fixed #632 by implementing ON_KILL action type and event.
- Fixed #629 by improving texture handling performance, caching, and memory usage.
- Fixed kill command is not working on NPCs.
- Fixed texture reload protection preventing cache reload after eviction.
- Fixed WebP validation bug in remote image validator (missing return statement).
- Refactored texture handling logic for better maintainability and future improvements.
- Added time-based reload protection (60 seconds) to replace permanent blocking mechanism.
- Added missing variant textures for chicken, pig and wolf.
- Added additional unit tests for texture handling.
- Improved gradle build tasks.
### 6.5.0
- ⚠️ Removed jar-in-jar bundle approach for better mod compatibility and api capabilities.
- Fixed #627 scissor implementation for better compatibility with other mods.
- Fixed #625 lively animation issues when using rotated or moved model parts.
- Fixed default animation are canceled when using scaled model parts.
- Added better pose animation control with smart, default und none options.
### 6.4.1
- Fixed #626 screen switching logic for different NPC UUIDs, thanks to
Spawnbladefor the detailed
### 6.4.0
- Fixed #626 by improving dialog data validation and error handling.
- Fixed #623 by refactoring render data and render handling.
- Fixed #622 by making sure custom data are properly saved and loaded.
- Fixed open dialog action type to allow opening dialogs from other NPCs.
- Fixed hashing issues by adding missing equals and hashCode methods for ConditionDataSet and
- Added custom data test item for #622 and easier testing of custom data.
- Improved records and fixed potential issues with missing data.
### 6.3.0
- Refactored config ui specific components and removed them from the core mod.
- Fixed dialog data by filtering dialog data before sending to the client.
- Fixed dialog editor layout issues and improved usability.
- Fixed missing default values for some dialog data fields.
- Added dialog priority support to control the order of dialog execution.
- Added condition support for dialog and scoreboard actions.
- Added frequency support for dialog to limit how often an dialog can be shown.
- Added new NPC preset to for scoreboard and condition support.
- Improved dialog button data format by removing redundant fields.
### 6.2.0
- Fixed legacy custom name parsing.
- Fixed string injection within dialogs.
- Fixed missing translation for action types.
- Added scoreboard action type to increase, decrease, set scoreboard values.
- Added
@score(...)NPC macro to display scoreboard values in the dialog. - Added additional unit tests.
- Improved spin button with indicators and better usability.
### 6.1.2
- Fixed container and menu sync issues with missing close container packets.
- Fixed close button not working in some cases.
- Fixed jumping mouse cursor between screen transitions.
- Fixed translation files and removed duplicate and deprecated entries.
- Moved Easy NPC wand to existing core item tab instead of creating a new one.
- Added cat pose support for different model parts (except tail).
- Improved EasyNPCWand glowing effect performance by disabling it when not needed.
- Improved custom entity detection by excluding non-living entities like displays, makers, throwns
- Improved cat variant handling.
### 6.1.1
- Fixed #615 by checking if item is equipped in one of the hands.
- Fixed #612 by re-validating entity types.
- Fixed #610 by force sync of hat and head layers for specific models.
- Fixed orc textures.
- Fixed cat variant handling for 1.21.5.
- Fixed player render by adjusting render state
skinfield. - Fixed cat renderer by adjusting render state
texturefield. - Fixed position, scaling and rotation preview.
- Fixed Fairy model.
- Improved custom model support and performance, by moving related logic into to client side only.
- Improved caching of player to UUID mappings for player skins.
- Limited change model commands and logic to Doppler NPCs only.
- Added renderEntityRaw method to render NPC as-it-is.
### 6.1.0 ✨
This is a major release. Please back up your worlds and NPC data before updating. This version
contains many improvements, optimizations, and internal changes that are **not fully compatible**
with earlier releases.
⚠️ Breaking changes
- Existing NPCs and their configuration data from versions before 6.1.0 may not load correctly or
- Internal data formats and some behaviors have been refactored to support new use-cases.
🧩 New modular structure
Easy NPC is now split into three separate mods:
- Easy NPC** – Bundle that includes both Core and Configuration UI for a plug‑and‑play experience.
- Easy NPC: Core** – Lightweight runtime and logic for NPCs, with minimal dependencies. Intended
- Easy NPC: Configuration UI** – Standalone configuration interface for creating and editing NPCs.
🎯 Why this change?
- Allows servers and modpacks to ship only the **Core** mod on the server side for a leaner setup.
- Reduces memory usage and load times when the UI is not required everywhere.
- Makes development and testing faster by separating UI and core logic.
[history]: https://github.com/MarkusBordihn/BOs-Easy-NPC/commits/
[upgrade_guide]: https://github.com/MarkusBordihn/BOs-Easy-NPC/wiki/Upgrading
## Note
This change log includes the summarized changes. For the full changelog, please go to
the [GitHub History][history] instead.
Note: Please always back up your world / NPCs before updating to a new version!
Check the [upgrade guide][upgrade_guide] for more information.
### 7.15.0
- Fixed #838 by keeping preset imports silent when run through
/executeor command blocks. - Fixed #380 by applying the NPC limit to the default spawner as well.
- Fixed #849 by allowing resource pack sounds in the sound configuration.
- Fixed #349 by no longer spawning NPCs left-handed at random.
- Fixed #851 by locking dialog buttons per dialog, not across dialogs with the same label.
- Fixed deleted or duplicated NPCs returning, memory leaks and several owner and UI issues.
- Fixed the Epic Fight Wither Skeleton NPC missing its Epic Fight mob patch.
- Fixed off-center inventory screens and their close button overlapping the "Custom" trading tab.
- Fixed scaled Doppler NPCs keeping the full hitbox of the mimicked entity.
- Fixed NPCs on a player's shoulder ignoring their scale and the Doppler's mimicked model.
- Changed requirements: same mod version on client and server, Easy Model Entities 2.5.0+.
- Changed backups of all worlds and killed NPC data to expire after 30 days, see
storage.cfg. - Added "Jump", "Assist Owner" and "Follow Nearest Player" to fix #845, fix #310, fix #761.
- Added an NPC inventory with item pickup and death drops to fix #111, fix #197, fix #543, fix #670.
- Added "Sit on Shoulder", a boss bar and
/easy_npc debug core loglevelto fix #577, fix #219. - Added the "Hold" animation mode, a "Bank Teller" preset and new API methods for addons.
### 7.14.0
- Fixed #846 by keeping custom poses for players who start seeing the NPC later.
- Fixed attribute and trading settings missing for players who start seeing the NPC later.
- Fixed changed max uses, XP and trading type not shown in the trading screens until reload.
- Fixed
/easy_npc sound setchanges not reaching players until the NPC was reloaded. - Added game tests that check NPC poses and settings after respawns and for new players.
### 7.13.0
- Fixed color and formatting tags in dialog button names showing as plain text.
- Fixed the button preview in the editor showing lowercase names as a raw translation key.
- Fixed the "Move EasyNPC" item not working for NPC owners outside of creative mode.
- Fixed
/easy_npc owner setreporting success even when the owner could not be changed. - Fixed the game crashing when the URL or player skin screen showed a skin download error.
- Fixed the preset browser search showing no results after scrolling down the list.
- Changed the network protocol version, so client and server must run the same mod version.
- Added
@initiator,@npcand@score()support to dialog button names to fix #841. - Added automatic client tests with the Client Runtime Interface Toolkit.
- Larger core refactoring and code cleanup.
### 7.12.2
- Fixed the Fairy hitbox being far too small, so its name tag and speech bubble sat in its body.
- Fixed scaled NPCs keeping their old hitbox and eye level, so hits, clicks and looking missed.
- Fixed oversized names, lists and NPC data in network packets being read without any limit.
- Fixed invalid NPC positions, scales, attributes, names and durations from being applied.
- Changed Fairy NPCs to take up the space of their model, so they collide and can be clicked.
- Changed Skeleton, Stray and Bogged NPCs to the vanilla hitbox height, they were slightly short.
- Changed the network protocol version, so client and server must run the same mod version.
### 7.12.1
- Fixed #836 by always showing "Restore", including datapack presets, with a reason tooltip.
- Fixed preset import and export messages missing, wrong or not warning about replaced NPCs.
- Fixed the preset browser reloading on each keystroke, leaking NPCs and clearing the selection.
- Fixed selection box drop-down lists being covered by the checkboxes and labels behind them.
- Fixed the preset list sorting, filter order and layout clipping options in small windows.
- Fixed
/easy_npc preset import datawithout a position importing it as a default preset. - Fixed spawn rate limit leaks, unstable preset IDs and "Spawn New" stacking NPCs on one spot.
- Changed "Restore" to refuse instead of spawning a copy when it is not permitted.
- Added sorting, a match count, reload, auto-close, the NPC ID and tooltips for presets and skins.
- Added
matching <pattern>batch imports with limits, a confirmation and a clickable position.
### 7.12.0
- Fixed #833 by showing Easy NPC Wand outlines only to the wand holder, owner and admins.
- Fixed #834 by adding "Set Home Here" and "Reset Home" buttons to the position configuration.
- Fixed #835 by keeping the NPC ID and position in exported presets, so imports restore the same
- Fixed preset imports and spawn eggs losing the owner's list entry and owner objectives.
- Fixed NPCs restored from an automatic backup losing their owner and becoming ownerless.
- Fixed selection lists showing only their first six entries and hiding the rest.
- Changed importing a preset to update the original NPC at its stored position instead of adding a
- Changed completed trades to play the "Trade completed" sound, which stayed silent before.
- Changed the API dialog call to report an unknown dialog label instead of always reporting success.
- Changed NPCs without arms to carry held items at the head or body instead of hiding them.
- Changed the optional Easy Model Entities dependency to require version 2.4.0 or newer.
- Added a "Sound" configuration with sounds for dialogs, speech, swimming, eating and fall damage.
- Added a searchable sound selection with volume and pitch sliders to the "Sound" configuration.
- Added a "Block Vehicles" option to keep NPCs out of boats, minecarts and modded chairs.
- Added the profession selection to all skin configurations and a new built-in skin per NPC type.
- Added client settings to hide name tags behind walls and
highlightEnabledfor wand outlines. - Added an "Exists" condition operation and API access to NPC movement, actions and presets.
### 7.11.0
- Fixed #828 by no longer freezing the server on logout when NPCs follow or watch the player.
- Fixed #831 by moving routine NPC removal messages to the debug log.
- Fixed #832 by making humanoid NPCs ignore custom player models, animations and poses.
- Fixed hourly NPC backups stuttering on large worlds and retaining timestamps of removed NPCs.
- Fixed hourly NPC backups losing the identity, owner and position of the backed-up NPC.
- Fixed owner-login restoration duplicating, repeatedly restoring, reviving or moving unloaded NPCs.
- Fixed NPC index and file synchronization issues causing lost NPCs, crashes or false warnings.
- Fixed stale NPC data after unloading, avoided redundant writes and added repeated-unload warnings.
- Fixed the preset browser failing to list custom and world presets saved in the SNBT format.
- Fixed speech bubbles losing their text and turning translucent with Iris shaders.
- Fixed the "Opacity" of an NPC being ignored while a shader pack is active.
- Fixed text formatting and macro parsing for translated speech bubbles and mod API texts.
- Fixed speech bubbles and their text staying hidden behind blocks while a shader pack is active.
- Added
minLightLevelto keep speech bubbles readable in dark surroundings.
### 7.10.0
- Fixed #829 by allowing bats and other non-walking mobs as the render entity of a Doppler NPC.
- Fixed NPCs rendered as a bat, frog or warden showing a static pose instead of their animation.
- Fixed the NPC name tag showing above the previews in the "Custom Models" configuration.
- Fixed speech bubbles being cut off by walls, doorframes and the NPC's own body.
- Fixed the previews in the "Custom Models" configuration.
- Changed the previews in the "Custom Models" configuration to stand on a common ground line.
- Changed overlapping speech bubbles to move apart and to stay visible when the NPC is off-screen.
- Changed "Navigation: Automatic" to use flying movement for NPCs rendered as a flying mob.
- Changed the render entity list to hide seats, paintings, thrown items and other non-mob entities.
- Added a "Min. hover height" slider for flying NPCs and client settings for speech bubbles.
### 7.9.0
- Fixed modded fish NPCs, like the ones of Tide 2, spinning around instead of swimming upright.
- Fixed "Navigation: Automatic" using ground movement for water NPCs and aquatic model NPCs.
- Fixed the "Random Swimming" objective never moving an NPC that uses aquatic navigation.
- Fixed a swimming NPC shaking or twitching in place instead of holding its tilt and swim depth.
- Fixed a swimming NPC turning in circles forever when it could not reach its next path point.
- Fixed an NPC that fell into water never getting out of it again.
- Fixed a following NPC searching a new path every tick while its target was unreachable.
- Fixed the "Move to" actions stopping short of a raised target or not starting while in the air.
- Fixed "Move back to Home" ignoring height differences and never returning from beyond 32 blocks.
- Fixed the "Opacity" input field being too narrow to show a value of 100.
- Fixed a damaged NPC with an Easy Model Entities model never flashing red.
- Changed modded water NPCs to swim level, vanilla water mobs keep their tilt as before.
- Changed the "Move to" actions to walk up to 48 blocks and to teleport only beyond that range.
- Changed "Move to" and "Move back to Home" to give up after three seconds without progress.
- Changed the timeout of a "Move to" action to count real ticks, it ran twice as long before.
- Changed a new "Random Swimming" objective to rank below following, fleeing and attack goals.
- Changed "Opacity" of an NPC with an Easy Model Entities model to be applied by that mod itself.
- Changed the minimum Easy Model Entities version to 2.3.0, older versions disable the integration.
- Added "Depth below surface" and "Height above floor" sliders for the swim level of an NPC.
- Added log entries for the NPC files written on a world save, with a warning above 250 ms each.
### 7.8.1
- Fixed #827 by rendering fish NPCs in water upright instead of always flopping on their side.
- Fixed #828 by keeping a damaged NPC from blocking the world save, it now falls back to defaults.
- Fixed a restored NPC picking up a random preset ID that changed with every save.
- Changed NPC data to only be written to disk when it actually changed.
### 7.8.0
- Fixed smaller text and UI issues.
- Changed an NPC that is already standing at its target position to finish the movement right away.
- Changed the "None" skin tab to "Advanced", which now holds "Disable Skin" and the texture field.
- Changed the minimum Easy Model Entities version to 2.2.0, older versions are no longer accepted.
- Added a "Move to" action, which sends an NPC to a position, a player, its owner or its home.
- Added a "Move to and Wait" action, which runs the following actions only after the arrival.
- Added an arrival radius, a timeout and an optional teleport to both move actions.
- Added an "Opacity" attribute from 0 to 100, which fades body, armor and hand items together.
- Added a "Set Opacity" action, which turns an NPC into a ghost or hides it completely.
- Added the "Lantern Wraith" preset, a ghost walking a square with a short line at every corner.
- Added API access to the move actions and the opacity of an NPC.
- Added a "Resource Location" skin type, which renders any texture of a mod or a resource pack.
- Added an "Advanced" skin tab, which previews the NPC with the entered texture before applying it.
### 7.7.7
- Fixed #821 by keeping the transparency of 64x64 skins, which Fresh Moves needs for its eyes. Skins
- Fixed #818 by running trade actions for Villager and Wandering Trader NPCs as well.
- Fixed a dialog with several text variants switching its speech bubble size every second.
- Fixed the skin cache storing the processed image instead of the original download.
- Fixed the untranslated interval names, like
PER_DAY, of the "Execution Limit" condition. - Fixed the
sitanimation of Easy Model NPCs, which never used the built-in sitting pose. - Fixed the speech bubble being cut off by the head of an NPC when a player stood close to it.
- Changed speech bubbles to keep their screen size and to move down or aside when a player is close.
- Changed the speech bubble text to render 20% larger than a name tag.
- Changed a time based action set with a "Wait" action to run in order instead of picking one entry.
- Changed dialog texts to wrap later, so an existing dialog can switch to the wider screen layout.
- Changed fallback actions to skip screen actions without a player, like the regular actions do.
- Changed the minimum Easy Model Entities version to 2.1.0, older versions disable the integration.
- Added a "Wait" action, which pauses the following actions of an event for a chosen duration.
- Added the "Countdown Timekeeper" preset, a speech bubble count to ten ending in sound and sparks.
- Added scaling and rotation for Doppler NPCs behind the "Experimental Features" checkbox. Both only
- Added a "Sound" action, which plays a sound at the NPC with sound category, volume and pitch.
- Added "Every 5 Minutes" and "Every 15 Minutes" to the "Execution Limit" condition.
- Added a "Player Idle" condition, which checks how long a player has not moved.
- Added an "Immovable" attribute, which keeps an NPC in place against pushing and knockback.
- Added
/easy_npc pauseto pause a single NPC or all NPCs; the global pause ends with the server. - Added API access to the sound action, the pause state and the idle time of a player.
- Added a texture override per model slot for Easy Model NPCs over
/easy_npc render texture. - Added a "Repeat" playback mode with a count and a time limit to the "Play Animation" action.
- Added API access to animation variants, texture slots and textures of Easy Model NPCs.
### 7.6.0
- Fixed unclear mod conflict errors for duplicate entity data tracker IDs.
- Fixed third-party health bars rendering over NPC previews in configuration and dialog screens.
- Fixed Doppler and Easy Model Entities NPCs using default hitboxes instead of their model size.
- Fixed the
/easy_npccommands suggesting no NPC UUIDs at all on a server. - Fixed the pose list of the "Set Pose" action drawing over its input field.
- Fixed the untranslated "Loop", "After current" and "Action Data Type" labels of the action editor.
- Fixed the missing hint text of the "Chance" condition.
- Fixed long condition hints running out of the editor screen instead of wrapping.
- Fixed the misaligned help icons and text buttons of the "Message" action.
- Fixed changes to the "Set Pose", "Play Animation" and "Stop Animation" actions not being saveable.
- Fixed the speech bubble text sitting closer to its upper border than to its lower one.
- Changed the NPC suggestions to list the crosshair NPC first and only own NPCs without permissions.
- Changed a preset export to only store what differs from a new NPC, without position or owner.
- Changed a preset without objectives or actions to fall back to the defaults of its NPC type.
- Changed events without a player, like "On Spawn" or "On Kill", to check their conditions. An
- Changed a time based action to pick the owner as
@initiatorwhenever the owner is nearby. - Changed speech bubbles to stay visible from 5 up to 18 seconds, depending on the text length.
- Changed the "Set Pose" action to only show its input field for the "custom" pose entry.
- Added time based actions on five fixed steps, from every ~1 second up to every ~15 minutes.
- Added a "Message" action for chat, system message and speech bubble text without a command.
- Added text variants, a sender name, a recipient and translation keys to the "Message" action.
- Added the speech bubble graphic as
easy_npc:textures/gui/speech_bubble.pngfor resource packs. - Added a "Chance" condition in percent and a "Relationship" condition for owner and faction.
- Added spawn, owner login, state change, day / night, weather and the missing "On Trade" events.
- Added a base preset per NPC type under
easy_npc:api/preset/base/, usable as a parent preset. - Added the "Wandering Companion" preset, a talkative NPC built from time based messages.
- Added an action registry, an action handler, a preset validator and richer event data for mods.
- Added a tooltip with name, type and distance to every NPC suggestion of the
/easy_npccommands. - Improved the NPC suggestions, which appear without typing and tolerate a near miss of one block.
### 7.5.0
- Fixed the home position of an NPC always reading as unset, which hid "Home" in the configuration
- Fixed NPCs spawned from a preset, the preset browser or a respawn never getting a home position.
- Fixed an NPC spawned from the preset browser keeping the home position of the world the preset was
- Fixed NPCs being drawn as a white silhouette with a shadow in the configuration, skin and preset
- Fixed #814 by giving every Cobblemon NPC its own animation state instead of one per species.
- Fixed #813 by letting "Move back to Home" work at any distance instead of only near its home.
- Fixed #812 by checking once per session whether a player changed their skin.
- Fixed #810 by accepting Cobblemon aspects of resource packs instead of only "shiny" and "female".
- Fixed the server crashing when an NPC with a "Tempt" objective ticked its goals.
- Fixed a single or boss spawner spawning without any limit when its preset carried no stored NPC.
- Fixed the "Legacy Easy NPC Data" warning appearing for newly created NPCs.
- Fixed missing transparency corrections for old 64x32 skins, which showed layer artifacts.
- Fixed the player skin screen freezing for a moment while a player name was looked up.
- Fixed the "Reset look at ..." objective label, which read "Reset loot at ..." in some languages.
- Fixed the "No Gravity" attribute being ignored after a preset import, which let NPCs fall.
- Fixed the Fabric game tests, which crashed on start because of the development helper mods.
- Fixed NPCs losing their owner when they were spawned again after a despawn.
- Fixed objectives being deleted from an NPC when the mod providing them was missing at start.
- Fixed importing a preset without a stored id, which spawned an NPC without owner and home.
- Fixed "Follow owner" and "Look at owner" keeping their old target after the owner was changed.
- Fixed attack targets staying assigned to an NPC after the targeted entity was gone.
- Fixed the "Look at Item" objective, which could be stored but never did anything.
- Fixed walking animation for Doppler NPC and 3rd party models.
- Fixed Forge never running its server start-up step, which left NPC tracking, factions and the
- Fixed Forge development runs starting without any mixins, which disabled the vanilla entity
- Changed the movement objectives to a fixed order: flee, follow, return home, then stroll. NPCs
- Changed inserting a preset into a vanilla monster spawner to keep its delay, count and range.
- Changed "Follow owner" and "Look at owner" without a chosen target to follow the owner of the NPC.
- Changed datapack presets to
easy_npc/preset/, the old folder still works, but only for easy_npc. - Changed the preset browser to always list its entries in the same order.
- Removed the experimental user-defined NPCs; the extra config file is no longer read or created.
- Removed the unused
SERVER_SKINskin type. - Added new gametest strcuture to support gametest in 1.21.11 and higher.
- Added a reload button to each entry of the player skin screen, to fetch a single skin again.
- Added the reason to the log whenever an NPC is removed, so an unexpected despawn can be traced.
- Added suggestions to
/easy_npc render set species. - Added support for presets from other mods, which no longer have to use the
easy_npcnamespace. - Added a preset visibility that hides a preset from the preset browser and the NPC screens.
- Added a teleport distance and a resting spot offset to the follow objectives.
- Added item tags, a "can be scared" option and a "only without owner" option to "Follow item".
- Added an item field to the look objectives, so an NPC can watch a chosen dropped item.
- Added an identifier per NPC, so a mod can find its own NPCs again.
- Added an option to spawn an NPC again when its owner logs in.
- Added game tests for NeoForge, which had none, and restored the spawn egg, dialog screen, data
- Added game tests for every configuration and editor screen, covering all three mod loaders.
- Added game tests for the home position, covering the spawn default, the stored value and
- Improved the model name parsing, which mistook a species ending in "_shiny" for a variant.
- Improved following of flying NPCs, which now steer directly when there is no path through the air.
- Improved third party support with an API for presets, own objectives and objective configuration.
### 7.4.0
- Fixed #807 by no longer pulling every same-type NPC within 32 blocks into a "Defend Self" fight.
- Fixed #805 by evaluating all visibility settings together instead of stopping at the first one.
- Fixed #804 by keeping the custom name on Doppler NPCs for name based textures and the name tag.
- Fixed #803 by adjusting assets to match typical Minecraft style instead of generic UI style.
- Fixed the day and night detection, which counted sunrise as night and sunset as day.
- Fixed the visibility in the Nether and the End, which used the Overworld time.
- Fixed the time and game mode visibility checkboxes appearing in a random order.
- Fixed game tests only being able to fail on their first assertion, which hid later failures.
- Fixed the "Saddled" horse skin variants, which never showed a saddle.
- Changed "Visible to Owner" and "Visible to Team" to also follow day, night and game mode.
- Changed Evoker, Illusioner and Vindicator variants without "Crossed Arms" to keep their arms down.
- Added a "Defend Faction" objective that attacks whoever hurt a nearby faction member or player.
- Added a system message when faction members fight each other and the faction stays out of it.
- Added a head equipment slot for Illagers so their captain banner can be removed or swapped.
- Added a day and night preview to the display configuration screen.
- Added unit and game tests for the visibility attributes and the faction defense.
- Improved the visibility check performance by reading the display attributes only once per check.
- Improved display attributes from older versions by completing them with their defaults.
- Improved the attack objective screen by disabling "Protect Owner" and "Defend Faction" when unset.
### 7.3.0
- Improved skin variants by carrying their data as typed fields instead of parsing variant names.
- Centralized the Cobblemon mod id and default model on shared constants.
- Reduced duplicated enum code with a shared
EnumUtilshelper forget(String)lookups. - Optimized villager profession and type lookups to use direct registry keys instead of scans.
- Optimized enum name lookups by caching tag names, ids and keys once at construction.
- Added unit and game tests for skin variants, villager resolution and the enum helper.
### 7.1.2
- Fixed #801 by using combination for NPC, Dialog and Action UUIDs to avoid collisions for action
### 7.1.1
- Fixed #800 by lazy loading entity types.
- Fixed #799 by fixing edge cases and adding additional documentation and better log messages.
- Fixed #798 by considering console, commands and command blocks as trusted command sources.
- Fixed a critical single-player / LAN issue where client and server NPCs shared the same registry.
- Fixed a memory leak in the configuration menu handling and added timeout and disconnect cleanup.
- Fixed duplicate downloads when several NPCs request the same skin at the same time.
- Fixed skin lookups failing after a error so a slow server no longer freezes the game.
- Fixed the URL skin screen freezing the game while checking a remote image; the check now runs in
- Added a new World Spawner block that limits an NPC preset across the whole world (all dimensions),
- Hardened remote skin downloads with a strict size limit and safe redirect handling to prevent
blockPrivateAddresses setting.- Improved server performance by only sending entity and player load events to NPCs that actually
### 7.0.0
- Fixed #794 by using the expected type for NPC rendering.
- Fixed scaling screen preview by pinning the entity feet to the 0 line of the scale ruler, so NPCs
box updates.
- Fixed #791 by adding Wandering Trader NPC type.
- Fixed #788 by extending the AI safeguards to Epic Fight and raw NPC variants (Piglin, Villager,
- Fixed #787, #531, #237 and #184 by adding a faction system with
/easy_npc factioncommands,
- Fixed #787, #771 and #572 by adding a new
targetobjectives tab to attack hostile factions or
- Fixed #786 by adding gender and shiny model variants for Cobblemon NPCs, searchable via
female
shiny in the model selection.- Fixed faction combat between invulnerable NPCs by adding the new
Attackable by Factionscombat
- Fixed Cobblemon model selection previews for oversized species by scaling with Cobblemon's own
- Fixed faction management edge cases by validating faction names, sorting faction lists and
- Fixed custom skin reloads by loading and clearing texture caches per skin model instead of always
- Improved the
Attackable by Players/Monsters/Factionscombat attributes to work independently of
Invulnerable, each opening a targeted hole for its own attacker group.- Improved preset command and network handling by splitting the large handlers into smaller focused
- Added Easy Model Entities Support.
- Added faction manager and faction editor screens to create, color and delete factions and manage
FACTION_MANAGEMENT security feature.- Added new
Miscattributes tab as home for the NPC faction assignment. - Added reusable warning and help icon components for inline hints with tooltips.
- Added additional unit and game tests for factions, target objectives and Cobblemon model variants.
### 6.25.0
- Fixed #782, #636, #622 by preserving data components during validations.
- Fixed #780 by caching remote texture downloads and reducing duplicate registrations.
- Fixed #767 by clamping attribute sliders against extreme values from other mods.
- Fixed #754 by adding custom data item matching for NPCs with actions and conditions.
- Fixed texture manager running in the wrong thread may cause crashes and deadlocks in >= 1.21.x.
- Fixed empty UUID handling for action conditions.
- Fixed execution limit reset for actions.
- Added texture registration queue to avoid multiple simultaneous downloads in the same tick.
- Added NPC coin, key and red token as consumable items for NPCs with actions and conditions.
- Added
Welcome Coin Traderas example NPC preset with custom coin, key and red token item data. - Added attribute safeguards against extreme values from other mods.
- Increased fallback max health value from 1024 to 4096 for high-health NPCs.
- Improved texture manager by reducing duplicate texture checks and registrations.
### 6.24.0
- Fixed #459, #775 by adding an option to block interactions with invisible NPCs.
- Fixed #774 startup crash related to optional Epic Fight and Cobblemon entity type maps.
- Fixed #773 by checking timed trade resets during base ticks and before opening trade screens.
- Fixed trade reset timing by increasing internal tickers correctly.
- Added time of day and weather conditions for #459.
- Added additional unit and game tests for trade resets, ticker handling and entity attributes.
- Added
Skywatch Scoutas example NPC preset with time of day and weather conditions.
### 6.23.0
- Fixed #774 by migrating isSunBurnTick error to 26.x.
- Fixed #772 by adjusting texture retries with 403 and 404 errors and lowering logging.
- Fixed #770 item rendering for Epic Fight NPCs (Evoker, Pillager, Vindicator and humanoid skins).
- Fixed #769 door loops with NPCs not reliably opening or closing doors.
- Fixed #760 by adding a dialog option and config setting (buttonConditionMode: LOCK or HIDE) to
- Fixed #709 by adding color picker popup for names with 32 colors and/or a manual RGB/hex value.
- Fixed NPC name color being reset when renaming without a specified color by preserving the
- Improved the door movement attributes so "Pass Door" is automatically enabled while "Open Door"
### 6.22.0
- Fixed #766 by passing the full server player context to command execution for better compatibility
- Fixed #764 by adding entity health, npc health conditions and NPC preset
Grukk, the Sparring Post as example for using these conditions.- Fixed #763 by making sure dialog button execution limits are now recorded.
- Fixed #758 by providing a example NPC preset named
One Wish Companion. - Fixed crashes related to 3rd party villager AI reading non-registered brain memories on Easy NPC
- Fixed Dialog buttons are not locked for server-side data as preparation for #760 and #644.
- Fixed #628 by adding conditional dialog opening support / command for better control over when
- Added brain AI for Piglin and Piglin Brute NPCs and registered the full vanilla brain memory set.
- Added additional guns to the gun tag for #757.
- Added a new "Open Dialog (Conditional)" action that opens a named dialog only if its conditions
- Added new entity health and npc health conditions for actions, dialogs and dialogs buttons.
- Added Piglin, Piglin Brute and Zombified Piglin NPCs invulnerable, for consistency with other
- Added a new "Knockback Immunity" combat attribute that prevents the NPC from being knocked back by
- Added a new "Explosion Immunity" combat attribute that makes the NPC immune to explosion damage
- Moved the "Projectile Collision" attribute to the Combat attribute screen, where it fits better
### 6.21.0
- Fixed item attachment for Illagers in crossed-arms pose.
- Fixed broken illager crossbow attack goal.
- Fixed crashes related to 3rd party items which are not renderable as hand items #756.
- Fixed crashes related to 3rd party mixins trying to access non-existing model parts #756.
- Fixed log.info spam message by reducing log verbosity and adding additional checks for custom
- Improved EasyNPCModelManager performance.
- Refactored NPC renderers to remove default hand item layer.
### 6.20.0
- Fixed crashes related to 3rd mods trying to access non-existing NPCs goals.
### 6.19.0
Note: This update adjusted the dialog background images by 10x6 pixels, which may require users to
adjust their custom dialog backgrounds if they are using custom ones.
- Fixed #752, #130 by adding dialog button condition support to allow to disable buttons.
- Fixed #683, #215 by adding typewriter effect support for dialog text.
- Fixed #690, #309 by allowing conditions for dialog, dialog buttons and interactions.
- Fixed smaller UI issues with dialog screen layout and background.
- Refactored dialog background images by 10x6 pixels on each side.
- Refactored dialog screen layout to better fit the new background size and improve appearance.
- Added typewriter effect and client configuration for dialog text.
- Added condition symbols to indicate the condition status for dialog, buttons and interactions.
- Added amount field for item conditions to allow checking for specific amounts of items.
- Added
Threshold Wardenas example NPC preset with various conditions and actions. - Added smaller bug fixes and optimizations related to dialog conditions and button states.
### 6.18.0
Note: This update changes the internal data format for conditions and actions, which may reset /
remove legacy existing execution-limit entries without stored IDs.
- Fixed #745 by adding conditions for actions to allow more complex and dynamic behavior.
- Fixed #652 by adding dialog button tooltip for longer texts.
- Fixed #687 by adding command value tooltip to show the full value.
- Added Experience Level conditions.
- Added Game-mode conditions.
- Added has item in inventory condition.
- Added has item in hand condition with (main hand and off-hand) support.
- Added player health condition.
- Added player tag condition.
- Added player team condition.
- Added Goldmere example NPC preset with various conditions and actions.
- Added negative condition support to allow negating conditions for more complex logic.
- Removed parameter pseudo IDs for
ActionDataEntryand replaced them with random UUIDs. - Refactored condition system to allow more condition types.
### 6.17.0
- Fixed #738 by adding additional tooltips for "Execute as player"
- Fixed to detailed logs by reducing log.info messages during startup and in-game.
- Added additional unit and game-tests.
### 6.16.0
- Fixed #732 by providing option to disable ESC key and close button for dialogs.
- Fixed #723 by avoid auto-close in specific cases like trading screens.
- Added general dialog configuration options to allow users to customize dialog behavior.
- Added avatar scaling and position offset options for dialogs.
- Added missing translation keys.
### 6.15.1
- Fixed #735 by extending the correct base class.
- Fixed several 26.1.2 specific issues from manual spawn testing.
### 6.15.0 (Trades, Player Heads, Epic Fight and QOL updates)
- Fixed #731 by resyncing species data, if species list is empty on the client.
- Fixed #730 by improving Epic Fight integration and enabled experimental features.
- Fixed #729 by making sure trade uses are stored correctly.
- Fixed #728 by adding custom head support for player heads.
- Fixed #689 by showing remaining trade uses and allow resetting manually and automatically.
- Fixed #218 and #132 with new trade configuration screen and better support for custom trades.
- Fixed trade specific edge by switching between basic and normal/advanced trading mode.
- Fixed dialog button text is truncated with tooltip showing the full text.
- Fixed Cobblemon animation issues by syncing animation state with Cobblemon Animation System.
- Added per trade specific actions to allow users triggering actions after buys.
- Added trade reset button to reset all trades easily.
- Added trade usage information to trade configuration screen.
- Added experimental feature state to allow users to manually enable experimental features.
- Added Griselda Grindstone as example trader with actions.
- Cleanup test files.
### 6.14.0
- Fixed #727 by making sure changes are synced to the client when changing values.
- Fixed #726 by adding additional allow lists for specific commands.
- Fixed #686, #389, #304, #211 by adding basic Cobblemon support with Cobblemon NPC.
- Fixed dialog misalignment and navigation issues by adjusting dialog sprites and screens.
- Fixed x and z root rotation by correcting rotation logic and pivot calculations.
- Added basic Cobblemon support with custom NPC type and model for testing.
### 6.13.0 (Security and Permissions Updates)
Notes: This update includes better security checks and permissions for multiplayer environments. It
allows to execute server commands which can be potentially dangerous if used with malicious intent.
- The update splits the model root data and logic from the rest of the model part data and logic,
- Fixed #725 by separating model root data and logic from the rest of the model part data and logic.
- Fixed #722 by supporting .sbnt files as local presets.
- Fixed #675 by adding dedicated assets for dialog and config screen backgrounds.
- Fixed #605, #532, #529 with new security checks and permissions system.
- Fixed #469, #311 by adding experimental api documentation and examples for custom model support.
- Fixed double rendering of config screen background by removing redundant background rendering.
- Fixed Ghast and Slime hitbox and name tag position issues by adjusting bounding box.
- ⚠️ Added security checks to prevent potential exploits and allow safe usage in multiplayer
- Replaced dynamic dialog screen background with a static one for better performance, customization
- Replaced dynamic config screen background with a static one for better performance.
- Refactored config-ui specific components and removed them from the core mod.
- Removed duplicated sprite sheets.
- Prepare permission system for possible Luck Perms integration in the future like #712.
- General code cleanup and optimizations related to config screen rendering and assets.
### 6.12.0
- Fixed #714 by adding additional checks for custom model part list based on vanilla models.
- Fixed #713 by reducing log verbosity with downgraded per-NPC INFO messages to DEBUG and
- Fixed #711 by reduced oversized startup/config log output.
- Fixed NBT validation guard to prevent unnecessary buffer allocations in production.
- Added model part name constants to EasyNPCModelManager for consistent usage across mixins.
- Improved RenderEntityTypeSupportConfig by enhancing filter logic and optimizing data structures
- Removed verbose debug logs that dump large data structures.
### 6.11.1
- Fixed #710 by improving backward-compatible parsing for recoverable trade data.
### 6.11.0
- Fixed #703 rendering issue with new custom layer system and hand renderings.
- Fixed #701 by adding additional safeguards and logging for invalid trading offers.
- Fixed smart animation not working properly with modified head position.
- Fixed head tracking by moving player detection back to server side-only.
- Fixed CustomLookAtPlayerGoal to better handle edge cases and reduce jitter.
- Fixed issue with Doppler NPCs keeping their hand inventory.
- Improved PoseManager logging message.
- Updated logo with a new design.
### 6.10.0
- Fixed #698 by adding try and catch for 3rd party entity creation.
- Fixed #695 by clearing model part rotations/positions when switching to a
DEFAULTvanilla pose. - Fixed #695 by applying lock rotation and pose animation only when the NPC is idle.
- Fixed #695 by correcting root rotation pivot to use actual bounding box height instead of 0.5f.
- Fixed multiple objective registration issues including inverted
isTargetedPlayercheck, wrong
targets.
- Fixed goal reference being retained after objective is unregistered.
- Removed auto-lock of ROOT rotation when loading poses; root lock is now user-controlled.
- Added lock rotation checkbox to the advanced and custom pose configuration screens.
- Added model-specific pose key filtering in
ConfigurationMenuHandlerfor the default pose screen. - Added unit tests for
CustomPosition,CustomRotation,CustomScale,ModelPose,
ModelAnimationBehavior and ModelAnimationData.- Added
NPCDataIsolationTestHelperand game tests for Fabric and Forge. - Increased max head yaw range from 60° to 65°.
### 6.9.0
- Fixed #692, #666 by adding caching and safeguards to prevent redundant retriggering of NPC entity
- Fixed #651, #617 by adding basic custom poses for all supported NPC types.
- Fixed #597 by adding additional Flee goals for fleeing from players, villagers, monsters, ...
- Fixed pose loading to read directly from mod resources instead of copying files to disk.
- Fixed duplicate
saveNPCcalls on entity join by checking existing registry entry first. - Added
despawnandspawncommands to remove and re-spawn NPCs by UUID with configurable removal
- Added
ModelPoseAPIandEasyNPCEntityHandlerpublic API classes for controlling NPC poses and
- Added pose data files for all supported NPC types.
- Added lock rotation checkbox to the basic pose configuration screen.
- Added
MoveToPositionGoalto move an NPC to a position before executing a callback action. - Added
EasyNPCLookControlandEasyNPCBodyRotationControlto respect locked root rotation. - Added synced owner change and dimension change to the NPC entity data index.
- Added EasyNPCItemAttachmentLayer into various entity renderers.
- Added dedicated
Flee Objectiveconfiguration tab with objectives for fleeing creepers, monsters,
- Added
FOLLOW_ITEMobjective to the follow objectives tab to make NPCs follow item entities by
minecraft:apple).- Added
LookAtEntityByUUIDGoaland enabled the look-at-entity-by-UUID and look-at-owner objectives
- Added
persistentflag toSynchedDataIndexso that transient indices (e.g. crossbow charge,
- Added configurable
customParticlesEnabledflag toSlimeBasefor API consumers. - Added
SoundType.PETand mappedCAT_PURRto the cat NPC for tamed ambient sound variety. - Reduced log verbosity for periodic NPC save operations from INFO to DEBUG.
### 6.8.3
- Fixed #680 by enforcing version miss-match by upgrading network protocol version.
- Fixed #679 by resetting position, rotation and size for name tag.
- Fixed #665 by adding multi state slide for root rotations.
- Fixed #664 by adding option to disable following mouse cursor for easier posing.
- Fixed #663 by improve support for X and Z root rotations.
- Fixed #661 by adding quick rotation with NPC wand and sneaking to the NPC to rotate the root to
- Fixed move tool is wrongly triggering interactions by adding check for move tool in interaction
- Fixed Preset Item is wrongly triggering interactions by adding check for preset item in
- Fixed Slime and Ghast hitbox and name tag position issues by adjusting bounding box and eye height
- Fixed Slime and Ghast GUI position by adjusting offset values.
### 6.8.2
- Fixed #677 by extending
SafeMerchantDatawith notifyTrade to avoid crashes. - Added progression data support for leveling up NPCs based on player interactions and actions.
- Added global NPC tracking system for better management and debugging of NPCs across the world.
- Added
OriginalModelConfig.withVariantTexture()option to allow using variant textures with the
### 6.8.1
- Fixed #676 by using existing preset helper method instead of custom one.
### 6.8.0 (Adding API support)
- Fixed #667 by adding warning messages and additional checks for invalid network packets.
- Fixed Horse spawn eggs model.
- Fixed pose support for allay, chicken, creeper, fox, ghast, horse, illager, iron golem, slime and
- Added NPC base classes for better API support.
- Added NPC raw classes for advanced API support.
- Added Slim and Ghast NPC types.
- Added Custom Model API for easier integration with other mods and custom models.
- Refactored internal data handling and registration for better maintainability and future
### 6.7.1
- Fixed #657 and #656 by adding additional client side checks for vanilla bug.
### 6.7.0
- Fixed #650 by implementing Wolf Leg Animations in setupAnim method.
- Fixed #648 by fixing canBeHitByProjectiles translation.
- Fixed #645 by adding
allowBypassInvulnerabilityconfig option to allow/deny bypassing
- Fixed delete button showing label even with small width.
- Fixed up and down buttons not positioned correctly in some cases.
- Fixed name tag showing up for dialog and configuration UI.
- Fixed distance action issue were multiple actions are not properly triggered.
- Fixed issues with NPC presets.
- Fixed Cat NPC and Wolf NPC owner data not syncing properly.
- Added preset browser for easier selection of common NPC presets.
- Added preset .snbt (text) export and import functionality for sharing NPC presets.
- Refactored existing NPC presets to use new .snbt format.
- Refactored spawner system to use new preset format for better maintainability and future
### 6.6.2
- Fixed #643 by rework scaling system.
- Fixed scaling not properly updating hitbox and nametag position after restart / reload.
- Added MID and MOUSE_OVER name tag visibility modes for finer control over NPC name display.
- Added team-based name tag visibility support respecting vanilla Team.
### 6.6.1
- Fixed #638 by refactored internal data handling for display attributes.
### 6.6.0
- Fixed #634 by implementing asynchronous texture loading with dedicated thread pool.
- Fixed texture loading blocking render thread causing game freezes.
- Fixed race conditions in texture reload protection using atomic operations.
- Fixed resource leaks in HTTP connections during remote texture downloads.
- Fixed URL validation spam allowing multiple simultaneous downloads of the same texture.
- Fixed exception handling for remote image validation preventing crashes on invalid URLs.
- Fixed
defineId called for:warning messages during NPC loading. - Refactored texture loading architecture with multi-level defense and rate limiting.
- Refactored entity data registration logic for better maintainability.
- Converted data classes to modern Java records for better immutability and thread-safety.
- Added thread-safe session server spam protection with ConcurrentHashMap.
- Added comprehensive error recovery with automatic cooldown reset on failures.
- Improved texture loading with 2-thread pool and 500ms rate limiting.
- Improved exception handling with specific catch blocks for IIOException and FileNotFoundException.
### 6.5.2
- Fixed Villager profession and job skin issue.
- Improved GitHub workflows by adding cache for gradle dependencies.
- Improved Gradle build time and cleanup tasks.
### 6.5.1
- Fixed #632 by implementing ON_KILL action type and event.
- Fixed #629 by improving texture handling performance, caching, and memory usage.
- Fixed kill command is not working on NPCs.
- Fixed texture reload protection preventing cache reload after eviction.
- Fixed WebP validation bug in remote image validator (missing return statement).
- Refactored texture handling logic for better maintainability and future improvements.
- Added time-based reload protection (60 seconds) to replace permanent blocking mechanism.
- Added missing variant textures for chicken, pig and wolf.
- Added additional unit tests for texture handling.
- Improved gradle build tasks.
### 6.5.0
- ⚠️ Removed jar-in-jar bundle approach for better mod compatibility and api capabilities.
- Fixed #627 scissor implementation for better compatibility with other mods.
- Fixed #625 lively animation issues when using rotated or moved model parts.
- Fixed default animation are canceled when using scaled model parts.
- Added better pose animation control with smart, default und none options.
### 6.4.1
- Fixed #626 screen switching logic for different NPC UUIDs, thanks to
Spawnbladefor the detailed
### 6.4.0
- Fixed #626 by improving dialog data validation and error handling.
- Fixed #623 by refactoring render data and render handling.
- Fixed #622 by making sure custom data are properly saved and loaded.
- Fixed open dialog action type to allow opening dialogs from other NPCs.
- Fixed hashing issues by adding missing equals and hashCode methods for ConditionDataSet and
- Added custom data test item for #622 and easier testing of custom data.
- Improved records and fixed potential issues with missing data.
### 6.3.0
- Refactored config ui specific components and removed them from the core mod.
- Fixed dialog data by filtering dialog data before sending to the client.
- Fixed dialog editor layout issues and improved usability.
- Fixed missing default values for some dialog data fields.
- Added dialog priority support to control the order of dialog execution.
- Added condition support for dialog and scoreboard actions.
- Added frequency support for dialog to limit how often an dialog can be shown.
- Added new NPC preset to for scoreboard and condition support.
- Improved dialog button data format by removing redundant fields.
### 6.2.0
- Fixed legacy custom name parsing.
- Fixed string injection within dialogs.
- Fixed missing translation for action types.
- Added scoreboard action type to increase, decrease, set scoreboard values.
- Added
@score(...)NPC macro to display scoreboard values in the dialog. - Added additional unit tests.
- Improved spin button with indicators and better usability.
### 6.1.2
- Fixed container and menu sync issues with missing close container packets.
- Fixed close button not working in some cases.
- Fixed jumping mouse cursor between screen transitions.
- Fixed translation files and removed duplicate and deprecated entries.
- Moved Easy NPC wand to existing core item tab instead of creating a new one.
- Added cat pose support for different model parts (except tail).
- Improved EasyNPCWand glowing effect performance by disabling it when not needed.
- Improved custom entity detection by excluding non-living entities like displays, makers, throwns
- Improved cat variant handling.
### 6.1.1
- Fixed #615 by checking if item is equipped in one of the hands.
- Fixed #612 by re-validating entity types.
- Fixed #610 by force sync of hat and head layers for specific models.
- Fixed orc textures.
- Fixed cat variant handling for 1.21.5.
- Fixed player render by adjusting render state
skinfield. - Fixed cat renderer by adjusting render state
texturefield. - Fixed position, scaling and rotation preview.
- Fixed Fairy model.
- Improved custom model support and performance, by moving related logic into to client side only.
- Improved caching of player to UUID mappings for player skins.
- Limited change model commands and logic to Doppler NPCs only.
- Added renderEntityRaw method to render NPC as-it-is.
### 6.1.0 ✨
This is a major release. Please back up your worlds and NPC data before updating. This version
contains many improvements, optimizations, and internal changes that are **not fully compatible**
with earlier releases.
⚠️ Breaking changes
- Existing NPCs and their configuration data from versions before 6.1.0 may not load correctly or
- Internal data formats and some behaviors have been refactored to support new use-cases.
🧩 New modular structure
Easy NPC is now split into three separate mods:
- Easy NPC** – Bundle that includes both Core and Configuration UI for a plug‑and‑play experience.
- Easy NPC: Core** – Lightweight runtime and logic for NPCs, with minimal dependencies. Intended
- Easy NPC: Configuration UI** – Standalone configuration interface for creating and editing NPCs.
🎯 Why this change?
- Allows servers and modpacks to ship only the **Core** mod on the server side for a leaner setup.
- Reduces memory usage and load times when the UI is not required everywhere.
- Makes development and testing faster by separating UI and core logic.
[history]: https://github.com/MarkusBordihn/BOs-Easy-NPC/commits/
[upgrade_guide]: https://github.com/MarkusBordihn/BOs-Easy-NPC/wiki/Upgrading
## Note
This change log includes the summarized changes. For the full changelog, please go to
the [GitHub History][history] instead.
Note: Please always back up your world / NPCs before updating to a new version!
Check the [upgrade guide][upgrade_guide] for more information.
### 7.15.0
- Fixed #838 by keeping preset imports silent when run through
/executeor command blocks. - Fixed #380 by applying the NPC limit to the default spawner as well.
- Fixed #849 by allowing resource pack sounds in the sound configuration.
- Fixed #349 by no longer spawning NPCs left-handed at random.
- Fixed #851 by locking dialog buttons per dialog, not across dialogs with the same label.
- Fixed deleted or duplicated NPCs returning, memory leaks and several owner and UI issues.
- Fixed the Epic Fight Wither Skeleton NPC missing its Epic Fight mob patch.
- Fixed off-center inventory screens and their close button overlapping the "Custom" trading tab.
- Fixed scaled Doppler NPCs keeping the full hitbox of the mimicked entity.
- Fixed NPCs on a player's shoulder ignoring their scale and the Doppler's mimicked model.
- Changed requirements: same mod version on client and server, Easy Model Entities 2.5.0+.
- Changed backups of all worlds and killed NPC data to expire after 30 days, see
storage.cfg. - Added "Jump", "Assist Owner" and "Follow Nearest Player" to fix #845, fix #310, fix #761.
- Added an NPC inventory with item pickup and death drops to fix #111, fix #197, fix #543, fix #670.
- Added "Sit on Shoulder", a boss bar and
/easy_npc debug core loglevelto fix #577, fix #219. - Added the "Hold" animation mode, a "Bank Teller" preset and new API methods for addons.
### 7.14.0
- Fixed #846 by keeping custom poses for players who start seeing the NPC later.
- Fixed attribute and trading settings missing for players who start seeing the NPC later.
- Fixed changed max uses, XP and trading type not shown in the trading screens until reload.
- Fixed
/easy_npc sound setchanges not reaching players until the NPC was reloaded. - Added game tests that check NPC poses and settings after respawns and for new players.
### 7.13.0
- Fixed color and formatting tags in dialog button names showing as plain text.
- Fixed the button preview in the editor showing lowercase names as a raw translation key.
- Fixed the "Move EasyNPC" item not working for NPC owners outside of creative mode.
- Fixed
/easy_npc owner setreporting success even when the owner could not be changed. - Fixed the game crashing when the URL or player skin screen showed a skin download error.
- Fixed the preset browser search showing no results after scrolling down the list.
- Changed the network protocol version, so client and server must run the same mod version.
- Added
@initiator,@npcand@score()support to dialog button names to fix #841. - Added automatic client tests with the Client Runtime Interface Toolkit.
- Larger core refactoring and code cleanup.
### 7.12.2
- Fixed the Fairy hitbox being far too small, so its name tag and speech bubble sat in its body.
- Fixed scaled NPCs keeping their old hitbox and eye level, so hits, clicks and looking missed.
- Fixed oversized names, lists and NPC data in network packets being read without any limit.
- Fixed invalid NPC positions, scales, attributes, names and durations from being applied.
- Changed Fairy NPCs to take up the space of their model, so they collide and can be clicked.
- Changed Skeleton, Stray and Bogged NPCs to the vanilla hitbox height, they were slightly short.
- Changed the network protocol version, so client and server must run the same mod version.
### 7.12.1
- Fixed #836 by always showing "Restore", including datapack presets, with a reason tooltip.
- Fixed preset import and export messages missing, wrong or not warning about replaced NPCs.
- Fixed the preset browser reloading on each keystroke, leaking NPCs and clearing the selection.
- Fixed selection box drop-down lists being covered by the checkboxes and labels behind them.
- Fixed the preset list sorting, filter order and layout clipping options in small windows.
- Fixed
/easy_npc preset import datawithout a position importing it as a default preset. - Fixed spawn rate limit leaks, unstable preset IDs and "Spawn New" stacking NPCs on one spot.
- Changed "Restore" to refuse instead of spawning a copy when it is not permitted.
- Added sorting, a match count, reload, auto-close, the NPC ID and tooltips for presets and skins.
- Added
matching <pattern>batch imports with limits, a confirmation and a clickable position.
### 7.12.0
- Fixed #833 by showing Easy NPC Wand outlines only to the wand holder, owner and admins.
- Fixed #834 by adding "Set Home Here" and "Reset Home" buttons to the position configuration.
- Fixed #835 by keeping the NPC ID and position in exported presets, so imports restore the same
- Fixed preset imports and spawn eggs losing the owner's list entry and owner objectives.
- Fixed NPCs restored from an automatic backup losing their owner and becoming ownerless.
- Fixed selection lists showing only their first six entries and hiding the rest.
- Changed importing a preset to update the original NPC at its stored position instead of adding a
- Changed completed trades to play the "Trade completed" sound, which stayed silent before.
- Changed the API dialog call to report an unknown dialog label instead of always reporting success.
- Changed NPCs without arms to carry held items at the head or body instead of hiding them.
- Changed the optional Easy Model Entities dependency to require version 2.4.0 or newer.
- Added a "Sound" configuration with sounds for dialogs, speech, swimming, eating and fall damage.
- Added a searchable sound selection with volume and pitch sliders to the "Sound" configuration.
- Added a "Block Vehicles" option to keep NPCs out of boats, minecarts and modded chairs.
- Added the profession selection to all skin configurations and a new built-in skin per NPC type.
- Added client settings to hide name tags behind walls and
highlightEnabledfor wand outlines. - Added an "Exists" condition operation and API access to NPC movement, actions and presets.
### 7.11.0
- Fixed #828 by no longer freezing the server on logout when NPCs follow or watch the player.
- Fixed #831 by moving routine NPC removal messages to the debug log.
- Fixed #832 by making humanoid NPCs ignore custom player models, animations and poses.
- Fixed hourly NPC backups stuttering on large worlds and retaining timestamps of removed NPCs.
- Fixed hourly NPC backups losing the identity, owner and position of the backed-up NPC.
- Fixed owner-login restoration duplicating, repeatedly restoring, reviving or moving unloaded NPCs.
- Fixed NPC index and file synchronization issues causing lost NPCs, crashes or false warnings.
- Fixed stale NPC data after unloading, avoided redundant writes and added repeated-unload warnings.
- Fixed the preset browser failing to list custom and world presets saved in the SNBT format.
- Fixed speech bubbles losing their text and turning translucent with Iris shaders.
- Fixed the "Opacity" of an NPC being ignored while a shader pack is active.
- Fixed text formatting and macro parsing for translated speech bubbles and mod API texts.
- Fixed speech bubbles and their text staying hidden behind blocks while a shader pack is active.
- Added
minLightLevelto keep speech bubbles readable in dark surroundings.
### 7.10.0
- Fixed #829 by allowing bats and other non-walking mobs as the render entity of a Doppler NPC.
- Fixed NPCs rendered as a bat, frog or warden showing a static pose instead of their animation.
- Fixed the NPC name tag showing above the previews in the "Custom Models" configuration.
- Fixed speech bubbles being cut off by walls, doorframes and the NPC's own body.
- Fixed the previews in the "Custom Models" configuration.
- Changed the previews in the "Custom Models" configuration to stand on a common ground line.
- Changed overlapping speech bubbles to move apart and to stay visible when the NPC is off-screen.
- Changed "Navigation: Automatic" to use flying movement for NPCs rendered as a flying mob.
- Changed the render entity list to hide seats, paintings, thrown items and other non-mob entities.
- Added a "Min. hover height" slider for flying NPCs and client settings for speech bubbles.
### 7.9.0
- Fixed modded fish NPCs, like the ones of Tide 2, spinning around instead of swimming upright.
- Fixed "Navigation: Automatic" using ground movement for water NPCs and aquatic model NPCs.
- Fixed the "Random Swimming" objective never moving an NPC that uses aquatic navigation.
- Fixed a swimming NPC shaking or twitching in place instead of holding its tilt and swim depth.
- Fixed a swimming NPC turning in circles forever when it could not reach its next path point.
- Fixed an NPC that fell into water never getting out of it again.
- Fixed a following NPC searching a new path every tick while its target was unreachable.
- Fixed the "Move to" actions stopping short of a raised target or not starting while in the air.
- Fixed "Move back to Home" ignoring height differences and never returning from beyond 32 blocks.
- Fixed the "Opacity" input field being too narrow to show a value of 100.
- Fixed a damaged NPC with an Easy Model Entities model never flashing red.
- Changed modded water NPCs to swim level, vanilla water mobs keep their tilt as before.
- Changed the "Move to" actions to walk up to 48 blocks and to teleport only beyond that range.
- Changed "Move to" and "Move back to Home" to give up after three seconds without progress.
- Changed the timeout of a "Move to" action to count real ticks, it ran twice as long before.
- Changed a new "Random Swimming" objective to rank below following, fleeing and attack goals.
- Changed "Opacity" of an NPC with an Easy Model Entities model to be applied by that mod itself.
- Changed the minimum Easy Model Entities version to 2.3.0, older versions disable the integration.
- Added "Depth below surface" and "Height above floor" sliders for the swim level of an NPC.
- Added log entries for the NPC files written on a world save, with a warning above 250 ms each.
### 7.8.1
- Fixed #827 by rendering fish NPCs in water upright instead of always flopping on their side.
- Fixed #828 by keeping a damaged NPC from blocking the world save, it now falls back to defaults.
- Fixed a restored NPC picking up a random preset ID that changed with every save.
- Changed NPC data to only be written to disk when it actually changed.
### 7.8.0
- Fixed smaller text and UI issues.
- Changed an NPC that is already standing at its target position to finish the movement right away.
- Changed the "None" skin tab to "Advanced", which now holds "Disable Skin" and the texture field.
- Changed the minimum Easy Model Entities version to 2.2.0, older versions are no longer accepted.
- Added a "Move to" action, which sends an NPC to a position, a player, its owner or its home.
- Added a "Move to and Wait" action, which runs the following actions only after the arrival.
- Added an arrival radius, a timeout and an optional teleport to both move actions.
- Added an "Opacity" attribute from 0 to 100, which fades body, armor and hand items together.
- Added a "Set Opacity" action, which turns an NPC into a ghost or hides it completely.
- Added the "Lantern Wraith" preset, a ghost walking a square with a short line at every corner.
- Added API access to the move actions and the opacity of an NPC.
- Added a "Resource Location" skin type, which renders any texture of a mod or a resource pack.
- Added an "Advanced" skin tab, which previews the NPC with the entered texture before applying it.
### 7.7.7
- Fixed #821 by keeping the transparency of 64x64 skins, which Fresh Moves needs for its eyes. Skins
- Fixed #818 by running trade actions for Villager and Wandering Trader NPCs as well.
- Fixed a dialog with several text variants switching its speech bubble size every second.
- Fixed the skin cache storing the processed image instead of the original download.
- Fixed the untranslated interval names, like
PER_DAY, of the "Execution Limit" condition. - Fixed the
sitanimation of Easy Model NPCs, which never used the built-in sitting pose. - Fixed the speech bubble being cut off by the head of an NPC when a player stood close to it.
- Changed speech bubbles to keep their screen size and to move down or aside when a player is close.
- Changed the speech bubble text to render 20% larger than a name tag.
- Changed a time based action set with a "Wait" action to run in order instead of picking one entry.
- Changed dialog texts to wrap later, so an existing dialog can switch to the wider screen layout.
- Changed fallback actions to skip screen actions without a player, like the regular actions do.
- Changed the minimum Easy Model Entities version to 2.1.0, older versions disable the integration.
- Added a "Wait" action, which pauses the following actions of an event for a chosen duration.
- Added the "Countdown Timekeeper" preset, a speech bubble count to ten ending in sound and sparks.
- Added scaling and rotation for Doppler NPCs behind the "Experimental Features" checkbox. Both only
- Added a "Sound" action, which plays a sound at the NPC with sound category, volume and pitch.
- Added "Every 5 Minutes" and "Every 15 Minutes" to the "Execution Limit" condition.
- Added a "Player Idle" condition, which checks how long a player has not moved.
- Added an "Immovable" attribute, which keeps an NPC in place against pushing and knockback.
- Added
/easy_npc pauseto pause a single NPC or all NPCs; the global pause ends with the server. - Added API access to the sound action, the pause state and the idle time of a player.
- Added a texture override per model slot for Easy Model NPCs over
/easy_npc render texture. - Added a "Repeat" playback mode with a count and a time limit to the "Play Animation" action.
- Added API access to animation variants, texture slots and textures of Easy Model NPCs.
### 7.6.0
- Fixed unclear mod conflict errors for duplicate entity data tracker IDs.
- Fixed third-party health bars rendering over NPC previews in configuration and dialog screens.
- Fixed Doppler and Easy Model Entities NPCs using default hitboxes instead of their model size.
- Fixed the
/easy_npccommands suggesting no NPC UUIDs at all on a server. - Fixed the pose list of the "Set Pose" action drawing over its input field.
- Fixed the untranslated "Loop", "After current" and "Action Data Type" labels of the action editor.
- Fixed the missing hint text of the "Chance" condition.
- Fixed long condition hints running out of the editor screen instead of wrapping.
- Fixed the misaligned help icons and text buttons of the "Message" action.
- Fixed changes to the "Set Pose", "Play Animation" and "Stop Animation" actions not being saveable.
- Fixed the speech bubble text sitting closer to its upper border than to its lower one.
- Changed the NPC suggestions to list the crosshair NPC first and only own NPCs without permissions.
- Changed a preset export to only store what differs from a new NPC, without position or owner.
- Changed a preset without objectives or actions to fall back to the defaults of its NPC type.
- Changed events without a player, like "On Spawn" or "On Kill", to check their conditions. An
- Changed a time based action to pick the owner as
@initiatorwhenever the owner is nearby. - Changed speech bubbles to stay visible from 5 up to 18 seconds, depending on the text length.
- Changed the "Set Pose" action to only show its input field for the "custom" pose entry.
- Added time based actions on five fixed steps, from every ~1 second up to every ~15 minutes.
- Added a "Message" action for chat, system message and speech bubble text without a command.
- Added text variants, a sender name, a recipient and translation keys to the "Message" action.
- Added the speech bubble graphic as
easy_npc:textures/gui/speech_bubble.pngfor resource packs. - Added a "Chance" condition in percent and a "Relationship" condition for owner and faction.
- Added spawn, owner login, state change, day / night, weather and the missing "On Trade" events.
- Added a base preset per NPC type under
easy_npc:api/preset/base/, usable as a parent preset. - Added the "Wandering Companion" preset, a talkative NPC built from time based messages.
- Added an action registry, an action handler, a preset validator and richer event data for mods.
- Added a tooltip with name, type and distance to every NPC suggestion of the
/easy_npccommands. - Improved the NPC suggestions, which appear without typing and tolerate a near miss of one block.
### 7.5.0
- Fixed the home position of an NPC always reading as unset, which hid "Home" in the configuration
- Fixed NPCs spawned from a preset, the preset browser or a respawn never getting a home position.
- Fixed an NPC spawned from the preset browser keeping the home position of the world the preset was
- Fixed NPCs being drawn as a white silhouette with a shadow in the configuration, skin and preset
- Fixed #814 by giving every Cobblemon NPC its own animation state instead of one per species.
- Fixed #813 by letting "Move back to Home" work at any distance instead of only near its home.
- Fixed #812 by checking once per session whether a player changed their skin.
- Fixed #810 by accepting Cobblemon aspects of resource packs instead of only "shiny" and "female".
- Fixed the server crashing when an NPC with a "Tempt" objective ticked its goals.
- Fixed a single or boss spawner spawning without any limit when its preset carried no stored NPC.
- Fixed the "Legacy Easy NPC Data" warning appearing for newly created NPCs.
- Fixed missing transparency corrections for old 64x32 skins, which showed layer artifacts.
- Fixed the player skin screen freezing for a moment while a player name was looked up.
- Fixed the "Reset look at ..." objective label, which read "Reset loot at ..." in some languages.
- Fixed the "No Gravity" attribute being ignored after a preset import, which let NPCs fall.
- Fixed the Fabric game tests, which crashed on start because of the development helper mods.
- Fixed NPCs losing their owner when they were spawned again after a despawn.
- Fixed objectives being deleted from an NPC when the mod providing them was missing at start.
- Fixed importing a preset without a stored id, which spawned an NPC without owner and home.
- Fixed "Follow owner" and "Look at owner" keeping their old target after the owner was changed.
- Fixed attack targets staying assigned to an NPC after the targeted entity was gone.
- Fixed the "Look at Item" objective, which could be stored but never did anything.
- Fixed walking animation for Doppler NPC and 3rd party models.
- Fixed Forge never running its server start-up step, which left NPC tracking, factions and the
- Fixed Forge development runs starting without any mixins, which disabled the vanilla entity
- Changed the movement objectives to a fixed order: flee, follow, return home, then stroll. NPCs
- Changed inserting a preset into a vanilla monster spawner to keep its delay, count and range.
- Changed "Follow owner" and "Look at owner" without a chosen target to follow the owner of the NPC.
- Changed datapack presets to
easy_npc/preset/, the old folder still works, but only for easy_npc. - Changed the preset browser to always list its entries in the same order.
- Removed the experimental user-defined NPCs; the extra config file is no longer read or created.
- Removed the unused
SERVER_SKINskin type. - Added new gametest strcuture to support gametest in 1.21.11 and higher.
- Added a reload button to each entry of the player skin screen, to fetch a single skin again.
- Added the reason to the log whenever an NPC is removed, so an unexpected despawn can be traced.
- Added suggestions to
/easy_npc render set species. - Added support for presets from other mods, which no longer have to use the
easy_npcnamespace. - Added a preset visibility that hides a preset from the preset browser and the NPC screens.
- Added a teleport distance and a resting spot offset to the follow objectives.
- Added item tags, a "can be scared" option and a "only without owner" option to "Follow item".
- Added an item field to the look objectives, so an NPC can watch a chosen dropped item.
- Added an identifier per NPC, so a mod can find its own NPCs again.
- Added an option to spawn an NPC again when its owner logs in.
- Added game tests for NeoForge, which had none, and restored the spawn egg, dialog screen, data
- Added game tests for every configuration and editor screen, covering all three mod loaders.
- Added game tests for the home position, covering the spawn default, the stored value and
- Improved the model name parsing, which mistook a species ending in "_shiny" for a variant.
- Improved following of flying NPCs, which now steer directly when there is no path through the air.
- Improved third party support with an API for presets, own objectives and objective configuration.
### 7.4.0
- Fixed #807 by no longer pulling every same-type NPC within 32 blocks into a "Defend Self" fight.
- Fixed #805 by evaluating all visibility settings together instead of stopping at the first one.
- Fixed #804 by keeping the custom name on Doppler NPCs for name based textures and the name tag.
- Fixed #803 by adjusting assets to match typical Minecraft style instead of generic UI style.
- Fixed the day and night detection, which counted sunrise as night and sunset as day.
- Fixed the visibility in the Nether and the End, which used the Overworld time.
- Fixed the time and game mode visibility checkboxes appearing in a random order.
- Fixed game tests only being able to fail on their first assertion, which hid later failures.
- Fixed the "Saddled" horse skin variants, which never showed a saddle.
- Changed "Visible to Owner" and "Visible to Team" to also follow day, night and game mode.
- Changed Evoker, Illusioner and Vindicator variants without "Crossed Arms" to keep their arms down.
- Added a "Defend Faction" objective that attacks whoever hurt a nearby faction member or player.
- Added a system message when faction members fight each other and the faction stays out of it.
- Added a head equipment slot for Illagers so their captain banner can be removed or swapped.
- Added a day and night preview to the display configuration screen.
- Added unit and game tests for the visibility attributes and the faction defense.
- Improved the visibility check performance by reading the display attributes only once per check.
- Improved display attributes from older versions by completing them with their defaults.
- Improved the attack objective screen by disabling "Protect Owner" and "Defend Faction" when unset.
### 7.3.0
- Improved skin variants by carrying their data as typed fields instead of parsing variant names.
- Centralized the Cobblemon mod id and default model on shared constants.
- Reduced duplicated enum code with a shared
EnumUtilshelper forget(String)lookups. - Optimized villager profession and type lookups to use direct registry keys instead of scans.
- Optimized enum name lookups by caching tag names, ids and keys once at construction.
- Added unit and game tests for skin variants, villager resolution and the enum helper.
### 7.1.2
- Fixed #801 by using combination for NPC, Dialog and Action UUIDs to avoid collisions for action
### 7.1.1
- Fixed #800 by lazy loading entity types.
- Fixed #799 by fixing edge cases and adding additional documentation and better log messages.
- Fixed #798 by considering console, commands and command blocks as trusted command sources.
- Fixed a critical single-player / LAN issue where client and server NPCs shared the same registry.
- Fixed a memory leak in the configuration menu handling and added timeout and disconnect cleanup.
- Fixed duplicate downloads when several NPCs request the same skin at the same time.
- Fixed skin lookups failing after a error so a slow server no longer freezes the game.
- Fixed the URL skin screen freezing the game while checking a remote image; the check now runs in
- Added a new World Spawner block that limits an NPC preset across the whole world (all dimensions),
- Hardened remote skin downloads with a strict size limit and safe redirect handling to prevent
blockPrivateAddresses setting.- Improved server performance by only sending entity and player load events to NPCs that actually
### 7.0.0
- Fixed #794 by using the expected type for NPC rendering.
- Fixed scaling screen preview by pinning the entity feet to the 0 line of the scale ruler, so NPCs
box updates.
- Fixed #791 by adding Wandering Trader NPC type.
- Fixed #788 by extending the AI safeguards to Epic Fight and raw NPC variants (Piglin, Villager,
- Fixed #787, #531, #237 and #184 by adding a faction system with
/easy_npc factioncommands,
- Fixed #787, #771 and #572 by adding a new
targetobjectives tab to attack hostile factions or
- Fixed #786 by adding gender and shiny model variants for Cobblemon NPCs, searchable via
female
shiny in the model selection.- Fixed faction combat between invulnerable NPCs by adding the new
Attackable by Factionscombat
- Fixed Cobblemon model selection previews for oversized species by scaling with Cobblemon's own
- Fixed faction management edge cases by validating faction names, sorting faction lists and
- Fixed custom skin reloads by loading and clearing texture caches per skin model instead of always
- Improved the
Attackable by Players/Monsters/Factionscombat attributes to work independently of
Invulnerable, each opening a targeted hole for its own attacker group.- Improved preset command and network handling by splitting the large handlers into smaller focused
- Added Easy Model Entities Support.
- Added faction manager and faction editor screens to create, color and delete factions and manage
FACTION_MANAGEMENT security feature.- Added new
Miscattributes tab as home for the NPC faction assignment. - Added reusable warning and help icon components for inline hints with tooltips.
- Added additional unit and game tests for factions, target objectives and Cobblemon model variants.
### 6.25.0
- Fixed #782, #636, #622 by preserving data components during validations.
- Fixed #780 by caching remote texture downloads and reducing duplicate registrations.
- Fixed #767 by clamping attribute sliders against extreme values from other mods.
- Fixed #754 by adding custom data item matching for NPCs with actions and conditions.
- Fixed texture manager running in the wrong thread may cause crashes and deadlocks in >= 1.21.x.
- Fixed empty UUID handling for action conditions.
- Fixed execution limit reset for actions.
- Added texture registration queue to avoid multiple simultaneous downloads in the same tick.
- Added NPC coin, key and red token as consumable items for NPCs with actions and conditions.
- Added
Welcome Coin Traderas example NPC preset with custom coin, key and red token item data. - Added attribute safeguards against extreme values from other mods.
- Increased fallback max health value from 1024 to 4096 for high-health NPCs.
- Improved texture manager by reducing duplicate texture checks and registrations.
### 6.24.0
- Fixed #459, #775 by adding an option to block interactions with invisible NPCs.
- Fixed #774 startup crash related to optional Epic Fight and Cobblemon entity type maps.
- Fixed #773 by checking timed trade resets during base ticks and before opening trade screens.
- Fixed trade reset timing by increasing internal tickers correctly.
- Added time of day and weather conditions for #459.
- Added additional unit and game tests for trade resets, ticker handling and entity attributes.
- Added
Skywatch Scoutas example NPC preset with time of day and weather conditions.
### 6.23.0
- Fixed #774 by migrating isSunBurnTick error to 26.x.
- Fixed #772 by adjusting texture retries with 403 and 404 errors and lowering logging.
- Fixed #770 item rendering for Epic Fight NPCs (Evoker, Pillager, Vindicator and humanoid skins).
- Fixed #769 door loops with NPCs not reliably opening or closing doors.
- Fixed #760 by adding a dialog option and config setting (buttonConditionMode: LOCK or HIDE) to
- Fixed #709 by adding color picker popup for names with 32 colors and/or a manual RGB/hex value.
- Fixed NPC name color being reset when renaming without a specified color by preserving the
- Improved the door movement attributes so "Pass Door" is automatically enabled while "Open Door"
### 6.22.0
- Fixed #766 by passing the full server player context to command execution for better compatibility
- Fixed #764 by adding entity health, npc health conditions and NPC preset
Grukk, the Sparring Post as example for using these conditions.- Fixed #763 by making sure dialog button execution limits are now recorded.
- Fixed #758 by providing a example NPC preset named
One Wish Companion. - Fixed crashes related to 3rd party villager AI reading non-registered brain memories on Easy NPC
- Fixed Dialog buttons are not locked for server-side data as preparation for #760 and #644.
- Fixed #628 by adding conditional dialog opening support / command for better control over when
- Added brain AI for Piglin and Piglin Brute NPCs and registered the full vanilla brain memory set.
- Added additional guns to the gun tag for #757.
- Added a new "Open Dialog (Conditional)" action that opens a named dialog only if its conditions
- Added new entity health and npc health conditions for actions, dialogs and dialogs buttons.
- Added Piglin, Piglin Brute and Zombified Piglin NPCs invulnerable, for consistency with other
- Added a new "Knockback Immunity" combat attribute that prevents the NPC from being knocked back by
- Added a new "Explosion Immunity" combat attribute that makes the NPC immune to explosion damage
- Moved the "Projectile Collision" attribute to the Combat attribute screen, where it fits better
### 6.21.0
- Fixed item attachment for Illagers in crossed-arms pose.
- Fixed broken illager crossbow attack goal.
- Fixed crashes related to 3rd party items which are not renderable as hand items #756.
- Fixed crashes related to 3rd party mixins trying to access non-existing model parts #756.
- Fixed log.info spam message by reducing log verbosity and adding additional checks for custom
- Improved EasyNPCModelManager performance.
- Refactored NPC renderers to remove default hand item layer.
### 6.20.0
- Fixed crashes related to 3rd mods trying to access non-existing NPCs goals.
### 6.19.0
Note: This update adjusted the dialog background images by 10x6 pixels, which may require users to
adjust their custom dialog backgrounds if they are using custom ones.
- Fixed #752, #130 by adding dialog button condition support to allow to disable buttons.
- Fixed #683, #215 by adding typewriter effect support for dialog text.
- Fixed #690, #309 by allowing conditions for dialog, dialog buttons and interactions.
- Fixed smaller UI issues with dialog screen layout and background.
- Refactored dialog background images by 10x6 pixels on each side.
- Refactored dialog screen layout to better fit the new background size and improve appearance.
- Added typewriter effect and client configuration for dialog text.
- Added condition symbols to indicate the condition status for dialog, buttons and interactions.
- Added amount field for item conditions to allow checking for specific amounts of items.
- Added
Threshold Wardenas example NPC preset with various conditions and actions. - Added smaller bug fixes and optimizations related to dialog conditions and button states.
### 6.18.0
Note: This update changes the internal data format for conditions and actions, which may reset /
remove legacy existing execution-limit entries without stored IDs.
- Fixed #745 by adding conditions for actions to allow more complex and dynamic behavior.
- Fixed #652 by adding dialog button tooltip for longer texts.
- Fixed #687 by adding command value tooltip to show the full value.
- Added Experience Level conditions.
- Added Game-mode conditions.
- Added has item in inventory condition.
- Added has item in hand condition with (main hand and off-hand) support.
- Added player health condition.
- Added player tag condition.
- Added player team condition.
- Added Goldmere example NPC preset with various conditions and actions.
- Added negative condition support to allow negating conditions for more complex logic.
- Removed parameter pseudo IDs for
ActionDataEntryand replaced them with random UUIDs. - Refactored condition system to allow more condition types.
### 6.17.0
- Fixed #738 by adding additional tooltips for "Execute as player"
- Fixed to detailed logs by reducing log.info messages during startup and in-game.
- Added additional unit and game-tests.
### 6.16.0
- Fixed #732 by providing option to disable ESC key and close button for dialogs.
- Fixed #723 by avoid auto-close in specific cases like trading screens.
- Added general dialog configuration options to allow users to customize dialog behavior.
- Added avatar scaling and position offset options for dialogs.
- Added missing translation keys.
### 6.15.1
- Fixed #735 by extending the correct base class.
- Fixed several 26.1.2 specific issues from manual spawn testing.
### 6.15.0 (Trades, Player Heads, Epic Fight and QOL updates)
- Fixed #731 by resyncing species data, if species list is empty on the client.
- Fixed #730 by improving Epic Fight integration and enabled experimental features.
- Fixed #729 by making sure trade uses are stored correctly.
- Fixed #728 by adding custom head support for player heads.
- Fixed #689 by showing remaining trade uses and allow resetting manually and automatically.
- Fixed #218 and #132 with new trade configuration screen and better support for custom trades.
- Fixed trade specific edge by switching between basic and normal/advanced trading mode.
- Fixed dialog button text is truncated with tooltip showing the full text.
- Fixed Cobblemon animation issues by syncing animation state with Cobblemon Animation System.
- Added per trade specific actions to allow users triggering actions after buys.
- Added trade reset button to reset all trades easily.
- Added trade usage information to trade configuration screen.
- Added experimental feature state to allow users to manually enable experimental features.
- Added Griselda Grindstone as example trader with actions.
- Cleanup test files.
### 6.14.0
- Fixed #727 by making sure changes are synced to the client when changing values.
- Fixed #726 by adding additional allow lists for specific commands.
- Fixed #686, #389, #304, #211 by adding basic Cobblemon support with Cobblemon NPC.
- Fixed dialog misalignment and navigation issues by adjusting dialog sprites and screens.
- Fixed x and z root rotation by correcting rotation logic and pivot calculations.
- Added basic Cobblemon support with custom NPC type and model for testing.
### 6.13.0 (Security and Permissions Updates)
Notes: This update includes better security checks and permissions for multiplayer environments. It
allows to execute server commands which can be potentially dangerous if used with malicious intent.
- The update splits the model root data and logic from the rest of the model part data and logic,
- Fixed #725 by separating model root data and logic from the rest of the model part data and logic.
- Fixed #722 by supporting .sbnt files as local presets.
- Fixed #675 by adding dedicated assets for dialog and config screen backgrounds.
- Fixed #605, #532, #529 with new security checks and permissions system.
- Fixed #469, #311 by adding experimental api documentation and examples for custom model support.
- Fixed double rendering of config screen background by removing redundant background rendering.
- Fixed Ghast and Slime hitbox and name tag position issues by adjusting bounding box.
- ⚠️ Added security checks to prevent potential exploits and allow safe usage in multiplayer
- Replaced dynamic dialog screen background with a static one for better performance, customization
- Replaced dynamic config screen background with a static one for better performance.
- Refactored config-ui specific components and removed them from the core mod.
- Removed duplicated sprite sheets.
- Prepare permission system for possible Luck Perms integration in the future like #712.
- General code cleanup and optimizations related to config screen rendering and assets.
### 6.12.0
- Fixed #714 by adding additional checks for custom model part list based on vanilla models.
- Fixed #713 by reducing log verbosity with downgraded per-NPC INFO messages to DEBUG and
- Fixed #711 by reduced oversized startup/config log output.
- Fixed NBT validation guard to prevent unnecessary buffer allocations in production.
- Added model part name constants to EasyNPCModelManager for consistent usage across mixins.
- Improved RenderEntityTypeSupportConfig by enhancing filter logic and optimizing data structures
- Removed verbose debug logs that dump large data structures.
### 6.11.1
- Fixed #710 by improving backward-compatible parsing for recoverable trade data.
### 6.11.0
- Fixed #703 rendering issue with new custom layer system and hand renderings.
- Fixed #701 by adding additional safeguards and logging for invalid trading offers.
- Fixed smart animation not working properly with modified head position.
- Fixed head tracking by moving player detection back to server side-only.
- Fixed CustomLookAtPlayerGoal to better handle edge cases and reduce jitter.
- Fixed issue with Doppler NPCs keeping their hand inventory.
- Improved PoseManager logging message.
- Updated logo with a new design.
### 6.10.0
- Fixed #698 by adding try and catch for 3rd party entity creation.
- Fixed #695 by clearing model part rotations/positions when switching to a
DEFAULTvanilla pose. - Fixed #695 by applying lock rotation and pose animation only when the NPC is idle.
- Fixed #695 by correcting root rotation pivot to use actual bounding box height instead of 0.5f.
- Fixed multiple objective registration issues including inverted
isTargetedPlayercheck, wrong
targets.
- Fixed goal reference being retained after objective is unregistered.
- Removed auto-lock of ROOT rotation when loading poses; root lock is now user-controlled.
- Added lock rotation checkbox to the advanced and custom pose configuration screens.
- Added model-specific pose key filtering in
ConfigurationMenuHandlerfor the default pose screen. - Added unit tests for
CustomPosition,CustomRotation,CustomScale,ModelPose,
ModelAnimationBehavior and ModelAnimationData.- Added
NPCDataIsolationTestHelperand game tests for Fabric and Forge. - Increased max head yaw range from 60° to 65°.
### 6.9.0
- Fixed #692, #666 by adding caching and safeguards to prevent redundant retriggering of NPC entity
- Fixed #651, #617 by adding basic custom poses for all supported NPC types.
- Fixed #597 by adding additional Flee goals for fleeing from players, villagers, monsters, ...
- Fixed pose loading to read directly from mod resources instead of copying files to disk.
- Fixed duplicate
saveNPCcalls on entity join by checking existing registry entry first. - Added
despawnandspawncommands to remove and re-spawn NPCs by UUID with configurable removal
- Added
ModelPoseAPIandEasyNPCEntityHandlerpublic API classes for controlling NPC poses and
- Added pose data files for all supported NPC types.
- Added lock rotation checkbox to the basic pose configuration screen.
- Added
MoveToPositionGoalto move an NPC to a position before executing a callback action. - Added
EasyNPCLookControlandEasyNPCBodyRotationControlto respect locked root rotation. - Added synced owner change and dimension change to the NPC entity data index.
- Added EasyNPCItemAttachmentLayer into various entity renderers.
- Added dedicated
Flee Objectiveconfiguration tab with objectives for fleeing creepers, monsters,
- Added
FOLLOW_ITEMobjective to the follow objectives tab to make NPCs follow item entities by
minecraft:apple).- Added
LookAtEntityByUUIDGoaland enabled the look-at-entity-by-UUID and look-at-owner objectives
- Added
persistentflag toSynchedDataIndexso that transient indices (e.g. crossbow charge,
- Added configurable
customParticlesEnabledflag toSlimeBasefor API consumers. - Added
SoundType.PETand mappedCAT_PURRto the cat NPC for tamed ambient sound variety. - Reduced log verbosity for periodic NPC save operations from INFO to DEBUG.
### 6.8.3
- Fixed #680 by enforcing version miss-match by upgrading network protocol version.
- Fixed #679 by resetting position, rotation and size for name tag.
- Fixed #665 by adding multi state slide for root rotations.
- Fixed #664 by adding option to disable following mouse cursor for easier posing.
- Fixed #663 by improve support for X and Z root rotations.
- Fixed #661 by adding quick rotation with NPC wand and sneaking to the NPC to rotate the root to
- Fixed move tool is wrongly triggering interactions by adding check for move tool in interaction
- Fixed Preset Item is wrongly triggering interactions by adding check for preset item in
- Fixed Slime and Ghast hitbox and name tag position issues by adjusting bounding box and eye height
- Fixed Slime and Ghast GUI position by adjusting offset values.
### 6.8.2
- Fixed #677 by extending
SafeMerchantDatawith notifyTrade to avoid crashes. - Added progression data support for leveling up NPCs based on player interactions and actions.
- Added global NPC tracking system for better management and debugging of NPCs across the world.
- Added
OriginalModelConfig.withVariantTexture()option to allow using variant textures with the
### 6.8.1
- Fixed #676 by using existing preset helper method instead of custom one.
### 6.8.0 (Adding API support)
- Fixed #667 by adding warning messages and additional checks for invalid network packets.
- Fixed Horse spawn eggs model.
- Fixed pose support for allay, chicken, creeper, fox, ghast, horse, illager, iron golem, slime and
- Added NPC base classes for better API support.
- Added NPC raw classes for advanced API support.
- Added Slim and Ghast NPC types.
- Added Custom Model API for easier integration with other mods and custom models.
- Refactored internal data handling and registration for better maintainability and future
### 6.7.1
- Fixed #657 and #656 by adding additional client side checks for vanilla bug.
### 6.7.0
- Fixed #650 by implementing Wolf Leg Animations in setupAnim method.
- Fixed #648 by fixing canBeHitByProjectiles translation.
- Fixed #645 by adding
allowBypassInvulnerabilityconfig option to allow/deny bypassing
- Fixed delete button showing label even with small width.
- Fixed up and down buttons not positioned correctly in some cases.
- Fixed name tag showing up for dialog and configuration UI.
- Fixed distance action issue were multiple actions are not properly triggered.
- Fixed issues with NPC presets.
- Fixed Cat NPC and Wolf NPC owner data not syncing properly.
- Added preset browser for easier selection of common NPC presets.
- Added preset .snbt (text) export and import functionality for sharing NPC presets.
- Refactored existing NPC presets to use new .snbt format.
- Refactored spawner system to use new preset format for better maintainability and future
### 6.6.2
- Fixed #643 by rework scaling system.
- Fixed scaling not properly updating hitbox and nametag position after restart / reload.
- Added MID and MOUSE_OVER name tag visibility modes for finer control over NPC name display.
- Added team-based name tag visibility support respecting vanilla Team.
### 6.6.1
- Fixed #638 by refactored internal data handling for display attributes.
### 6.6.0
- Fixed #634 by implementing asynchronous texture loading with dedicated thread pool.
- Fixed texture loading blocking render thread causing game freezes.
- Fixed race conditions in texture reload protection using atomic operations.
- Fixed resource leaks in HTTP connections during remote texture downloads.
- Fixed URL validation spam allowing multiple simultaneous downloads of the same texture.
- Fixed exception handling for remote image validation preventing crashes on invalid URLs.
- Fixed
defineId called for:warning messages during NPC loading. - Refactored texture loading architecture with multi-level defense and rate limiting.
- Refactored entity data registration logic for better maintainability.
- Converted data classes to modern Java records for better immutability and thread-safety.
- Added thread-safe session server spam protection with ConcurrentHashMap.
- Added comprehensive error recovery with automatic cooldown reset on failures.
- Improved texture loading with 2-thread pool and 500ms rate limiting.
- Improved exception handling with specific catch blocks for IIOException and FileNotFoundException.
### 6.5.2
- Fixed Villager profession and job skin issue.
- Improved GitHub workflows by adding cache for gradle dependencies.
- Improved Gradle build time and cleanup tasks.
### 6.5.1
- Fixed #632 by implementing ON_KILL action type and event.
- Fixed #629 by improving texture handling performance, caching, and memory usage.
- Fixed kill command is not working on NPCs.
- Fixed texture reload protection preventing cache reload after eviction.
- Fixed WebP validation bug in remote image validator (missing return statement).
- Refactored texture handling logic for better maintainability and future improvements.
- Added time-based reload protection (60 seconds) to replace permanent blocking mechanism.
- Added missing variant textures for chicken, pig and wolf.
- Added additional unit tests for texture handling.
- Improved gradle build tasks.
### 6.5.0
- ⚠️ Removed jar-in-jar bundle approach for better mod compatibility and api capabilities.
- Fixed #627 scissor implementation for better compatibility with other mods.
- Fixed #625 lively animation issues when using rotated or moved model parts.
- Fixed default animation are canceled when using scaled model parts.
- Added better pose animation control with smart, default und none options.
### 6.4.1
- Fixed #626 screen switching logic for different NPC UUIDs, thanks to
Spawnbladefor the detailed
### 6.4.0
- Fixed #626 by improving dialog data validation and error handling.
- Fixed #623 by refactoring render data and render handling.
- Fixed #622 by making sure custom data are properly saved and loaded.
- Fixed open dialog action type to allow opening dialogs from other NPCs.
- Fixed hashing issues by adding missing equals and hashCode methods for ConditionDataSet and
- Added custom data test item for #622 and easier testing of custom data.
- Improved records and fixed potential issues with missing data.
### 6.3.0
- Refactored config ui specific components and removed them from the core mod.
- Fixed dialog data by filtering dialog data before sending to the client.
- Fixed dialog editor layout issues and improved usability.
- Fixed missing default values for some dialog data fields.
- Added dialog priority support to control the order of dialog execution.
- Added condition support for dialog and scoreboard actions.
- Added frequency support for dialog to limit how often an dialog can be shown.
- Added new NPC preset to for scoreboard and condition support.
- Improved dialog button data format by removing redundant fields.
### 6.2.0
- Fixed legacy custom name parsing.
- Fixed string injection within dialogs.
- Fixed missing translation for action types.
- Added scoreboard action type to increase, decrease, set scoreboard values.
- Added
@score(...)NPC macro to display scoreboard values in the dialog. - Added additional unit tests.
- Improved spin button with indicators and better usability.
### 6.1.2
- Fixed container and menu sync issues with missing close container packets.
- Fixed close button not working in some cases.
- Fixed jumping mouse cursor between screen transitions.
- Fixed translation files and removed duplicate and deprecated entries.
- Moved Easy NPC wand to existing core item tab instead of creating a new one.
- Added cat pose support for different model parts (except tail).
- Improved EasyNPCWand glowing effect performance by disabling it when not needed.
- Improved custom entity detection by excluding non-living entities like displays, makers, throwns
- Improved cat variant handling.
### 6.1.1
- Fixed #615 by checking if item is equipped in one of the hands.
- Fixed #612 by re-validating entity types.
- Fixed #610 by force sync of hat and head layers for specific models.
- Fixed orc textures.
- Fixed cat variant handling for 1.21.5.
- Fixed player render by adjusting render state
skinfield. - Fixed cat renderer by adjusting render state
texturefield. - Fixed position, scaling and rotation preview.
- Fixed Fairy model.
- Improved custom model support and performance, by moving related logic into to client side only.
- Improved caching of player to UUID mappings for player skins.
- Limited change model commands and logic to Doppler NPCs only.
- Added renderEntityRaw method to render NPC as-it-is.
### 6.1.0 ✨
This is a major release. Please back up your worlds and NPC data before updating. This version
contains many improvements, optimizations, and internal changes that are **not fully compatible**
with earlier releases.
⚠️ Breaking changes
- Existing NPCs and their configuration data from versions before 6.1.0 may not load correctly or
- Internal data formats and some behaviors have been refactored to support new use-cases.
🧩 New modular structure
Easy NPC is now split into three separate mods:
- Easy NPC** – Bundle that includes both Core and Configuration UI for a plug‑and‑play experience.
- Easy NPC: Core** – Lightweight runtime and logic for NPCs, with minimal dependencies. Intended
- Easy NPC: Configuration UI** – Standalone configuration interface for creating and editing NPCs.
🎯 Why this change?
- Allows servers and modpacks to ship only the **Core** mod on the server side for a leaner setup.
- Reduces memory usage and load times when the UI is not required everywhere.
- Makes development and testing faster by separating UI and core logic.
[history]: https://github.com/MarkusBordihn/BOs-Easy-NPC/commits/
[upgrade_guide]: https://github.com/MarkusBordihn/BOs-Easy-NPC/wiki/Upgrading
## Note
This change log includes the summarized changes. For the full changelog, please go to
the [GitHub History][history] instead.
Note: Please always back up your world / NPCs before updating to a new version!
Check the [upgrade guide][upgrade_guide] for more information.
### 7.15.0
- Fixed #838 by keeping preset imports silent when run through
/executeor command blocks. - Fixed #380 by applying the NPC limit to the default spawner as well.
- Fixed #849 by allowing resource pack sounds in the sound configuration.
- Fixed #349 by no longer spawning NPCs left-handed at random.
- Fixed #851 by locking dialog buttons per dialog, not across dialogs with the same label.
- Fixed deleted or duplicated NPCs returning, memory leaks and several owner and UI issues.
- Fixed the Epic Fight Wither Skeleton NPC missing its Epic Fight mob patch.
- Changed requirements: same mod version on client and server, Easy Model Entities 2.5.0+.
- Changed backups of all worlds and killed NPC data to expire after 30 days, see
storage.cfg. - Added "Jump", "Assist Owner" and "Follow Nearest Player" to fix #845, fix #310, fix #761.
- Added an NPC inventory with item pickup and death drops to fix #111, fix #197, fix #543, fix #670.
- Added "Sit on Shoulder", a boss bar and
/easy_npc debug core loglevelto fix #577, fix #219. - Added the "Hold" animation mode, a "Bank Teller" preset and new API methods for addons.
### 7.14.0
- Fixed #846 by keeping custom poses for players who start seeing the NPC later.
- Fixed attribute and trading settings missing for players who start seeing the NPC later.
- Fixed changed max uses, XP and trading type not shown in the trading screens until reload.
- Fixed
/easy_npc sound setchanges not reaching players until the NPC was reloaded. - Added game tests that check NPC poses and settings after respawns and for new players.
### 7.13.0
- Fixed color and formatting tags in dialog button names showing as plain text.
- Fixed the button preview in the editor showing lowercase names as a raw translation key.
- Fixed the "Move EasyNPC" item not working for NPC owners outside of creative mode.
- Fixed
/easy_npc owner setreporting success even when the owner could not be changed. - Fixed the game crashing when the URL or player skin screen showed a skin download error.
- Fixed the preset browser search showing no results after scrolling down the list.
- Changed the network protocol version, so client and server must run the same mod version.
- Added
@initiator,@npcand@score()support to dialog button names to fix #841. - Added automatic client tests with the Client Runtime Interface Toolkit.
- Larger core refactoring and code cleanup.
### 7.12.2
- Fixed the Fairy hitbox being far too small, so its name tag and speech bubble sat in its body.
- Fixed scaled NPCs keeping their old hitbox and eye level, so hits, clicks and looking missed.
- Fixed oversized names, lists and NPC data in network packets being read without any limit.
- Fixed invalid NPC positions, scales, attributes, names and durations from being applied.
- Changed Fairy NPCs to take up the space of their model, so they collide and can be clicked.
- Changed Skeleton, Stray and Bogged NPCs to the vanilla hitbox height, they were slightly short.
- Changed the network protocol version, so client and server must run the same mod version.
### 7.12.1
- Fixed #836 by always showing "Restore", including datapack presets, with a reason tooltip.
- Fixed preset import and export messages missing, wrong or not warning about replaced NPCs.
- Fixed the preset browser reloading on each keystroke, leaking NPCs and clearing the selection.
- Fixed the preset list sorting, filter order and layout clipping options in small windows.
- Fixed
/easy_npc preset import datawithout a position importing it as a default preset. - Fixed spawn rate limit leaks, unstable preset IDs and "Spawn New" stacking NPCs on one spot.
- Changed "Restore" to refuse instead of spawning a copy when it is not permitted.
- Added sorting, a match count, reload, auto-close, the NPC ID and tooltips for presets and skins.
- Added
matching <pattern>batch imports with limits, a confirmation and a clickable position.
### 7.12.0
- Fixed #833 by showing Easy NPC Wand outlines only to the wand holder, owner and admins.
- Fixed #834 by adding "Set Home Here" and "Reset Home" buttons to the position configuration.
- Fixed #835 by keeping the NPC ID and position in exported presets, so imports restore the same
- Fixed preset imports and spawn eggs losing the owner's list entry and owner objectives.
- Fixed NPCs restored from an automatic backup losing their owner and becoming ownerless.
- Fixed selection lists showing only their first six entries and hiding the rest.
- Changed importing a preset to update the original NPC at its stored position instead of adding a
- Changed completed trades to play the "Trade completed" sound, which stayed silent before.
- Changed the API dialog call to report an unknown dialog label instead of always reporting success.
- Changed NPCs without arms to carry held items at the head or body instead of hiding them.
- Changed the optional Easy Model Entities dependency to require version 2.4.0 or newer.
- Added a "Sound" configuration with sounds for dialogs, speech, swimming, eating and fall damage.
- Added a searchable sound selection with volume and pitch sliders to the "Sound" configuration.
- Added a "Block Vehicles" option to keep NPCs out of boats, minecarts and modded chairs.
- Added the profession selection to all skin configurations and a new built-in skin per NPC type.
- Added client settings to hide name tags behind walls and
highlightEnabledfor wand outlines. - Added an "Exists" condition operation and API access to NPC movement, actions and presets.
### 7.11.0
- Fixed #828 by no longer freezing the server on logout when NPCs follow or watch the player.
- Fixed #831 by moving routine NPC removal messages to the debug log.
- Fixed #832 by making humanoid NPCs ignore custom player models, animations and poses.
- Fixed hourly NPC backups stuttering on large worlds and retaining timestamps of removed NPCs.
- Fixed hourly NPC backups losing the identity, owner and position of the backed-up NPC.
- Fixed owner-login restoration duplicating, repeatedly restoring, reviving or moving unloaded NPCs.
- Fixed NPC index and file synchronization issues causing lost NPCs, crashes or false warnings.
- Fixed stale NPC data after unloading, avoided redundant writes and added repeated-unload warnings.
- Fixed the preset browser failing to list custom and world presets saved in the SNBT format.
- Fixed speech bubbles losing their text and turning translucent with Iris shaders.
- Fixed the "Opacity" of an NPC being ignored while a shader pack is active.
- Fixed text formatting and macro parsing for translated speech bubbles and mod API texts.
- Fixed speech bubbles and their text staying hidden behind blocks while a shader pack is active.
- Added
minLightLevelto keep speech bubbles readable in dark surroundings.
### 7.10.0
- Fixed #829 by allowing bats and other non-walking mobs as the render entity of a Doppler NPC.
- Fixed NPCs rendered as a bat, frog or warden showing a static pose instead of their animation.
- Fixed the NPC name tag showing above the previews in the "Custom Models" configuration.
- Fixed speech bubbles being cut off by walls, doorframes and the NPC's own body.
- Fixed the previews in the "Custom Models" configuration.
- Changed the previews in the "Custom Models" configuration to stand on a common ground line.
- Changed overlapping speech bubbles to move apart and to stay visible when the NPC is off-screen.
- Changed "Navigation: Automatic" to use flying movement for NPCs rendered as a flying mob.
- Changed the render entity list to hide seats, paintings, thrown items and other non-mob entities.
- Added a "Min. hover height" slider for flying NPCs and client settings for speech bubbles.
### 7.9.0
- Fixed modded fish NPCs, like the ones of Tide 2, spinning around instead of swimming upright.
- Fixed "Navigation: Automatic" using ground movement for water NPCs and aquatic model NPCs.
- Fixed the "Random Swimming" objective never moving an NPC that uses aquatic navigation.
- Fixed a swimming NPC shaking or twitching in place instead of holding its tilt and swim depth.
- Fixed a swimming NPC turning in circles forever when it could not reach its next path point.
- Fixed an NPC that fell into water never getting out of it again.
- Fixed a following NPC searching a new path every tick while its target was unreachable.
- Fixed the "Move to" actions stopping short of a raised target or not starting while in the air.
- Fixed "Move back to Home" ignoring height differences and never returning from beyond 32 blocks.
- Fixed the "Opacity" input field being too narrow to show a value of 100.
- Fixed a damaged NPC with an Easy Model Entities model never flashing red.
- Changed modded water NPCs to swim level, vanilla water mobs keep their tilt as before.
- Changed the "Move to" actions to walk up to 48 blocks and to teleport only beyond that range.
- Changed "Move to" and "Move back to Home" to give up after three seconds without progress.
- Changed the timeout of a "Move to" action to count real ticks, it ran twice as long before.
- Changed a new "Random Swimming" objective to rank below following, fleeing and attack goals.
- Changed "Opacity" of an NPC with an Easy Model Entities model to be applied by that mod itself.
- Changed the minimum Easy Model Entities version to 2.3.0, older versions disable the integration.
- Added "Depth below surface" and "Height above floor" sliders for the swim level of an NPC.
- Added log entries for the NPC files written on a world save, with a warning above 250 ms each.
### 7.8.1
- Fixed #827 by rendering fish NPCs in water upright instead of always flopping on their side.
- Fixed #828 by keeping a damaged NPC from blocking the world save, it now falls back to defaults.
- Fixed a restored NPC picking up a random preset ID that changed with every save.
- Changed NPC data to only be written to disk when it actually changed.
### 7.8.0
- Fixed smaller text and UI issues.
- Changed an NPC that is already standing at its target position to finish the movement right away.
- Changed the "None" skin tab to "Advanced", which now holds "Disable Skin" and the texture field.
- Added a "Move to" action, which sends an NPC to a position, a player, its owner or its home.
- Added a "Move to and Wait" action, which runs the following actions only after the arrival.
- Added an arrival radius, a timeout and an optional teleport to both move actions.
- Added an "Opacity" attribute from 0 to 100, which fades body, armor and hand items together.
- Added a "Set Opacity" action, which turns an NPC into a ghost or hides it completely.
- Added the "Lantern Wraith" preset, a ghost walking a square with a short line at every corner.
- Added API access to the move actions and the opacity of an NPC.
- Added a "Resource Location" skin type, which renders any texture of a mod or a resource pack.
- Added an "Advanced" skin tab, which previews the NPC with the entered texture before applying it.
### 7.7.7
- Fixed #821 by keeping the transparency of 64x64 skins, which Fresh Moves needs for its eyes. Skins
- Fixed #818 by running trade actions for Villager and Wandering Trader NPCs as well.
- Fixed a dialog with several text variants switching its speech bubble size every second.
- Fixed the skin cache storing the processed image instead of the original download.
- Fixed the untranslated interval names, like
PER_DAY, of the "Execution Limit" condition. - Fixed the
sitanimation of Easy Model NPCs, which never used the built-in sitting pose. - Fixed the speech bubble being cut off by the head of an NPC when a player stood close to it.
- Changed speech bubbles to keep their screen size and to move down or aside when a player is close.
- Changed the speech bubble text to render 20% larger than a name tag.
- Changed a time based action set with a "Wait" action to run in order instead of picking one entry.
- Changed dialog texts to wrap later, so an existing dialog can switch to the wider screen layout.
- Changed fallback actions to skip screen actions without a player, like the regular actions do.
- Changed the minimum Easy Model Entities version to 2.1.0, older versions disable the integration.
- Added a "Wait" action, which pauses the following actions of an event for a chosen duration.
- Added the "Countdown Timekeeper" preset, a speech bubble count to ten ending in sound and sparks.
- Added scaling and rotation for Doppler NPCs behind the "Experimental Features" checkbox. Both only
- Added a "Sound" action, which plays a sound at the NPC with sound category, volume and pitch.
- Added "Every 5 Minutes" and "Every 15 Minutes" to the "Execution Limit" condition.
- Added a "Player Idle" condition, which checks how long a player has not moved.
- Added an "Immovable" attribute, which keeps an NPC in place against pushing and knockback.
- Added
/easy_npc pauseto pause a single NPC or all NPCs; the global pause ends with the server. - Added API access to the sound action, the pause state and the idle time of a player.
- Added a texture override per model slot for Easy Model NPCs over
/easy_npc render texture. - Added a "Repeat" playback mode with a count and a time limit to the "Play Animation" action.
- Added API access to animation variants, texture slots and textures of Easy Model NPCs.
### 7.6.0
- Fixed unclear mod conflict errors for duplicate entity data tracker IDs.
- Fixed third-party health bars rendering over NPC previews in configuration and dialog screens.
- Fixed Doppler and Easy Model Entities NPCs using default hitboxes instead of their model size.
- Fixed the
/easy_npccommands suggesting no NPC UUIDs at all on a server. - Fixed the pose list of the "Set Pose" action drawing over its input field.
- Fixed the untranslated "Loop", "After current" and "Action Data Type" labels of the action editor.
- Fixed the missing hint text of the "Chance" condition.
- Fixed long condition hints running out of the editor screen instead of wrapping.
- Fixed the misaligned help icons and text buttons of the "Message" action.
- Fixed changes to the "Set Pose", "Play Animation" and "Stop Animation" actions not being saveable.
- Fixed the speech bubble text sitting closer to its upper border than to its lower one.
- Changed the NPC suggestions to list the crosshair NPC first and only own NPCs without permissions.
- Changed a preset export to only store what differs from a new NPC, without position or owner.
- Changed a preset without objectives or actions to fall back to the defaults of its NPC type.
- Changed events without a player, like "On Spawn" or "On Kill", to check their conditions. An
- Changed a time based action to pick the owner as
@initiatorwhenever the owner is nearby. - Changed speech bubbles to stay visible from 5 up to 18 seconds, depending on the text length.
- Changed the "Set Pose" action to only show its input field for the "custom" pose entry.
- Added time based actions on five fixed steps, from every ~1 second up to every ~15 minutes.
- Added a "Message" action for chat, system message and speech bubble text without a command.
- Added text variants, a sender name, a recipient and translation keys to the "Message" action.
- Added the speech bubble graphic as
easy_npc:textures/gui/speech_bubble.pngfor resource packs. - Added a "Chance" condition in percent and a "Relationship" condition for owner and faction.
- Added spawn, owner login, state change, day / night, weather and the missing "On Trade" events.
- Added a base preset per NPC type under
easy_npc:api/preset/base/, usable as a parent preset. - Added the "Wandering Companion" preset, a talkative NPC built from time based messages.
- Added an action registry, an action handler, a preset validator and richer event data for mods.
- Added a tooltip with name, type and distance to every NPC suggestion of the
/easy_npccommands. - Improved the NPC suggestions, which appear without typing and tolerate a near miss of one block.
### 7.5.0
- Fixed the home position of an NPC always reading as unset, which hid "Home" in the configuration
- Fixed NPCs spawned from a preset, the preset browser or a respawn never getting a home position.
- Fixed an NPC spawned from the preset browser keeping the home position of the world the preset was
- Fixed NPCs being drawn as a white silhouette with a shadow in the configuration, skin and preset
- Fixed #814 by giving every Cobblemon NPC its own animation state instead of one per species.
- Fixed #813 by letting "Move back to Home" work at any distance instead of only near its home.
- Fixed #812 by checking once per session whether a player changed their skin.
- Fixed #810 by accepting Cobblemon aspects of resource packs instead of only "shiny" and "female".
- Fixed the server crashing when an NPC with a "Tempt" objective ticked its goals.
- Fixed flying NPCs like Allay, Vex and Ghast moving on the ground instead of flying.
- Fixed dialog, button, preset, pose and texture names with duplicates or special characters.
- Fixed conditions not being editable on a dedicated server and untranslated condition texts.
- Fixed Easy Model Entities NPCs not turning their head and their model list ignoring a
/reload. - Fixed the "Legacy Easy NPC Data" warning appearing for newly created NPCs.
- Fixed missing transparency corrections for old 64x32 skins, which showed layer artifacts.
- Fixed the player skin screen freezing for a moment while a player name was looked up.
- Fixed the "Reset look at ..." objective label, which read "Reset loot at ..." in some languages.
- Fixed the Fabric game tests, which crashed on start because of the development helper mods.
- Fixed NPCs losing their owner when they were spawned again after a despawn.
- Fixed objectives being deleted from an NPC when the mod providing them was missing at start.
- Fixed objectives being switched off for good when their target entity was missing.
- Fixed importing a preset without a stored id, which spawned an NPC without owner and home.
- Fixed "Follow owner" and "Look at owner" keeping their old target after the owner was changed.
- Fixed attack targets staying assigned to an NPC after the targeted entity was gone.
- Fixed the "Look at Item" objective, which could be stored but never did anything.
- Fixed walking animation for Doppler NPC and 3rd party models.
- Fixed Forge never running its server start-up step, which left NPC tracking, factions and the
- Fixed Forge development runs starting without any mixins, which disabled the vanilla entity
- Changed the movement objectives to a fixed order: flee, follow, return home, then stroll. NPCs
- Changed datapack presets to
easy_npc/preset/, the old folder still works, but only for easy_npc. - Changed the preset browser to always list its entries in the same order.
- Changed the required Easy Model Entities version to 1.7.0, floating models now hover by default.
- Removed the experimental user-defined NPCs; the extra config file is no longer read or created.
- Removed the unused
SERVER_SKINskin type. - Added new gametest strcuture to support gametest in 1.21.11 and higher.
- Added a reload button to each entry of the player skin screen, to fetch a single skin again.
- Added the reason to the log whenever an NPC is removed, so an unexpected despawn can be traced.
- Added suggestions to
/easy_npc render set species. - Added support for presets from other mods, which no longer have to use the
easy_npcnamespace. - Added a preset visibility that hides a preset from the preset browser and the NPC screens.
- Added a teleport distance and a resting spot offset to the follow objectives.
- Added item tags, a "can be scared" option and a "only without owner" option to "Follow item".
- Added an item field to the look objectives, so an NPC can watch a chosen dropped item.
- Added an identifier per NPC, so a mod can find its own NPCs again.
- Added an option to spawn an NPC again when its owner logs in.
- Added NPC states with number, yes/no and text values, usable as condition, action and command.
- Added a "Navigation" and a "Hover height" setting to switch any NPC between ground and flying.
- Added a parent preset reference, so a preset can build on another one and only override changes.
- Added the state driven "Forge Keeper" preset.
- Added custom conditions and dialog, action and state events for other mods.
- Added "On Far Distance" as a distance action, which triggers at 32 blocks.
- Added game tests for NeoForge, which had none, and restored the spawn egg, dialog screen, data
- Added game tests for every configuration and editor screen, covering all three mod loaders.
- Added game tests for the home position, covering the spawn default, the stored value and
- Improved the model name parsing, which mistook a species ending in "_shiny" for a variant.
- Improved following of flying NPCs, which now steer directly when there is no path through the air.
- Improved floating Easy Model Entities models, which now bob up and down.
- Improved third party support with an API for presets, own objectives and objective configuration.
### 7.4.0
- Fixed #807 by no longer pulling every same-type NPC within 32 blocks into a "Defend Self" fight.
- Fixed #805 by evaluating all visibility settings together instead of stopping at the first one.
- Fixed #804 by keeping the custom name on Doppler NPCs for name based textures and the name tag.
- Fixed #803 by adjusting assets to match typical Minecraft style instead of generic UI style.
- Fixed the day and night detection, which counted sunrise as night and sunset as day.
- Fixed the visibility in the Nether and the End, which used the Overworld time.
- Fixed the time and game mode visibility checkboxes appearing in a random order.
- Fixed game tests only being able to fail on their first assertion, which hid later failures.
- Fixed the "Saddled" horse skin variants, which never showed a saddle.
- Changed "Visible to Owner" and "Visible to Team" to also follow day, night and game mode.
- Changed Evoker, Illusioner and Vindicator variants without "Crossed Arms" to keep their arms down.
- Added a "Defend Faction" objective that attacks whoever hurt a nearby faction member or player.
- Added a system message when faction members fight each other and the faction stays out of it.
- Added a head equipment slot for Illagers so their captain banner can be removed or swapped.
- Added a day and night preview to the display configuration screen.
- Added unit and game tests for the visibility attributes and the faction defense.
- Improved the visibility check performance by reading the display attributes only once per check.
- Improved display attributes from older versions by completing them with their defaults.
- Improved the attack objective screen by disabling "Protect Owner" and "Defend Faction" when unset.
### 7.3.0
- Improved skin variants by carrying their data as typed fields instead of parsing variant names.
- Centralized the Cobblemon mod id and default model on shared constants.
- Reduced duplicated enum code with a shared
EnumUtilshelper forget(String)lookups. - Optimized villager profession and type lookups to use direct registry keys instead of scans.
- Optimized enum name lookups by caching tag names, ids and keys once at construction.
- Added unit and game tests for skin variants, villager resolution and the enum helper.
### 7.2.0
- Fixed #801 by using combination for NPC, Dialog and Action UUIDs to avoid collisions for action
### 7.1.1
- Fixed #800 by lazy loading entity types.
- Fixed #799 by fixing edge cases and adding additional documentation and better log messages.
- Fixed #798 by considering console, commands and command blocks as trusted command sources.
- Fixed a critical single-player / LAN issue where client and server NPCs shared the same registry.
- Fixed a memory leak in the configuration menu handling and added timeout and disconnect cleanup.
- Fixed duplicate downloads when several NPCs request the same skin at the same time.
- Fixed skin lookups failing after a error so a slow server no longer freezes the game.
- Fixed the URL skin screen freezing the game while checking a remote image; the check now runs in
- Added a new World Spawner block that limits an NPC preset across the whole world (all dimensions),
- Hardened remote skin downloads with a strict size limit and safe redirect handling to prevent
blockPrivateAddresses setting.- Improved server performance by only sending entity and player load events to NPCs that actually
### 7.0.0
- Fixed #794 by using the expected type for NPC rendering.
- Fixed #791 by adding Wandering Trader NPC type.
- Fixed #788 by extending the AI safeguards to Epic Fight and raw NPC variants (Piglin, Villager,
- Fixed #787, #531, #237 and #184 by adding a faction system with
/easy_npc factioncommands,
- Fixed #787, #771 and #572 by adding a new
targetobjectives tab to attack hostile factions or
- Fixed #786 by adding gender and shiny model variants for Cobblemon NPCs, searchable via
female
shiny in the model selection.- Fixed faction combat between invulnerable NPCs by adding the new
Attackable by Factionscombat
- Fixed Cobblemon model selection previews for oversized species by scaling with Cobblemon's own
- Fixed faction management edge cases by validating faction names, sorting faction lists and
- Fixed custom skin reloads by loading and clearing texture caches per skin model instead of always
- Improved the
Attackable by Players/Monsters/Factionscombat attributes to work independently of
Invulnerable, each opening a targeted hole for its own attacker group.- Improved preset command and network handling by splitting the large handlers into smaller focused
- Added Easy Model Entities Support.
- Added faction manager and faction editor screens to create, color and delete factions and manage
FACTION_MANAGEMENT security feature.- Added new
Miscattributes tab as home for the NPC faction assignment. - Added reusable warning and help icon components for inline hints with tooltips.
- Added additional unit and game tests for factions, target objectives and Cobblemon model variants.
### 6.25.0
- Fixed #782, #636, #622 by preserving data components during validations.
- Fixed #780 by caching remote texture downloads and reducing duplicate registrations.
- Fixed #767 by clamping attribute sliders against extreme values from other mods.
- Fixed #754 by adding custom data item matching for NPCs with actions and conditions.
- Fixed texture manager running in the wrong thread may cause crashes and deadlocks in >= 1.21.x.
- Fixed empty UUID handling for action conditions.
- Fixed execution limit reset for actions.
- Added texture registration queue to avoid multiple simultaneous downloads in the same tick.
- Added NPC coin, key and red token as consumable items for NPCs with actions and conditions.
- Added
Welcome Coin Traderas example NPC preset with custom coin, key and red token item data. - Added attribute safeguards against extreme values from other mods.
- Increased fallback max health value from 1024 to 4096 for high-health NPCs.
- Improved texture manager by reducing duplicate texture checks and registrations.
### 6.24.0
- Fixed #459, #775 by adding an option to block interactions with invisible NPCs.
- Fixed #774 startup crash related to optional Epic Fight and Cobblemon entity type maps.
- Fixed #773 by checking timed trade resets during base ticks and before opening trade screens.
- Fixed trade reset timing by increasing internal tickers correctly.
- Added time of day and weather conditions for #459.
- Added additional unit and game tests for trade resets, ticker handling and entity attributes.
- Added
Skywatch Scoutas example NPC preset with time of day and weather conditions.
### 6.23.0
- Fixed #772 by adjusting texture retries with 403 and 404 errors and lowering logging.
- Fixed #770 item rendering for Epic Fight NPCs (Evoker, Pillager, Vindicator and humanoid skins).
- Fixed #769 door loops with NPCs not reliably opening or closing doors.
- Fixed #760 by adding a dialog option and config setting (buttonConditionMode: LOCK or HIDE) to
- Fixed #709 by adding color picker popup for names with 32 colors and/or a manual RGB/hex value.
- Fixed NPC name color being reset when renaming without a specified color by preserving the
- Improved the door movement attributes so "Pass Door" is automatically enabled while "Open Door"
### 6.22.0
- Fixed #766 by passing the full server player context to command execution for better compatibility
- Fixed #764 by adding entity health, npc health conditions and NPC preset
Grukk, the Sparring Post as example for using these conditions.- Fixed #763 by making sure dialog button execution limits are now recorded.
- Fixed #758 by providing a example NPC preset named
One Wish Companion. - Fixed crashes related to 3rd party villager AI reading non-registered brain memories on Easy NPC
- Fixed Dialog buttons are not locked for server-side data as preparation for #760 and #644.
- Fixed #628 by adding conditional dialog opening support / command for better control over when
- Added brain AI for Piglin and Piglin Brute NPCs and registered the full vanilla brain memory set.
- Added additional guns to the gun tag for #757.
- Added a new "Open Dialog (Conditional)" action that opens a named dialog only if its conditions
- Added new entity health and npc health conditions for actions, dialogs and dialogs buttons.
- Added Piglin, Piglin Brute and Zombified Piglin NPCs invulnerable, for consistency with other
- Added a new "Knockback Immunity" combat attribute that prevents the NPC from being knocked back by
- Added a new "Explosion Immunity" combat attribute that makes the NPC immune to explosion damage
- Moved the "Projectile Collision" attribute to the Combat attribute screen, where it fits better
### 6.21.0
- Fixed item attachment for Illagers in crossed-arms pose.
- Fixed broken illager crossbow attack goal.
- Fixed crashes related to 3rd party items which are not renderable as hand items #756.
- Fixed crashes related to 3rd party mixins trying to access non-existing model parts #756.
- Fixed log.info spam message by reducing log verbosity and adding additional checks for custom
- Improved EasyNPCModelManager performance.
- Refactored NPC renderers to remove default hand item layer.
### 6.20.0
- Fixed crashes related to 3rd mods trying to access non-existing NPCs goals.
### 6.19.0
Note: This update adjusted the dialog background images by 10x6 pixels, which may require users to
adjust their custom dialog backgrounds if they are using custom ones.
- Fixed #752, #130 by adding dialog button condition support to allow to disable buttons.
- Fixed #683, #215 by adding typewriter effect support for dialog text.
- Fixed #690, #309 by allowing conditions for dialog, dialog buttons and interactions.
- Fixed smaller UI issues with dialog screen layout and background.
- Refactored dialog background images by 10x6 pixels on each side.
- Refactored dialog screen layout to better fit the new background size and improve appearance.
- Added typewriter effect and client configuration for dialog text.
- Added condition symbols to indicate the condition status for dialog, buttons and interactions.
- Added amount field for item conditions to allow checking for specific amounts of items.
- Added
Threshold Wardenas example NPC preset with various conditions and actions. - Added smaller bug fixes and optimizations related to dialog conditions and button states.
### 6.18.0
Note: This update changes the internal data format for conditions and actions, which may reset /
remove legacy existing execution-limit entries without stored IDs.
- Fixed #745 by adding conditions for actions to allow more complex and dynamic behavior.
- Fixed #652 by adding dialog button tooltip for longer texts.
- Fixed #687 by adding command value tooltip to show the full value.
- Added Experience Level conditions.
- Added Game-mode conditions.
- Added has item in inventory condition.
- Added has item in hand condition with (main hand and off-hand) support.
- Added player health condition.
- Added player tag condition.
- Added player team condition.
- Added Goldmere example NPC preset with various conditions and actions.
- Added negative condition support to allow negating conditions for more complex logic.
- Removed parameter pseudo IDs for
ActionDataEntryand replaced them with random UUIDs. - Refactored condition system to allow more condition types.
### 6.17.0
- Fixed #738 by adding additional tooltips for "Execute as player"
- Fixed to detailed logs by reducing log.info messages during startup and in-game.
- Added additional unit and game-tests.
### 6.16.0
- Fixed #732 by providing option to disable ESC key and close button for dialogs.
- Fixed #723 by avoid auto-close in specific cases like trading screens.
- Added general dialog configuration options to allow users to customize dialog behavior.
- Added avatar scaling and position offset options for dialogs.
- Added missing translation keys.
### 6.15.0 (Trades, Player Heads, Epic Fight and QOL updates)
- Fixed #731 by resyncing species data, if species list is empty on the client.
- Fixed #730 by improving Epic Fight integration and enabled experimental features.
- Fixed #729 by making sure trade uses are stored correctly.
- Fixed #728 by adding custom head support for player heads.
- Fixed #689 by showing remaining trade uses and allow resetting manually and automatically.
- Fixed #218 and #132 with new trade configuration screen and better support for custom trades.
- Fixed trade specific edge by switching between basic and normal/advanced trading mode.
- Fixed dialog button text is truncated with tooltip showing the full text.
- Fixed Cobblemon animation issues by syncing animation state with Cobblemon Animation System.
- Added per trade specific actions to allow users triggering actions after buys.
- Added trade reset button to reset all trades easily.
- Added trade usage information to trade configuration screen.
- Added experimental feature state to allow users to manually enable experimental features.
- Added Griselda Grindstone as example trader with actions.
- Cleanup test files.
### 6.14.0
- Fixed #727 by making sure changes are synced to the client when changing values.
- Fixed #726 by adding additional allow lists for specific commands.
- Fixed #686, #389, #304, #211 by adding basic Cobblemon support with Cobblemon NPC.
- Fixed dialog misalignment and navigation issues by adjusting dialog sprites and screens.
- Fixed x and z root rotation by correcting rotation logic and pivot calculations.
- Added basic Cobblemon support with custom NPC type and model for testing.
### 6.13.0 (Security and Permissions Updates)
Notes: This update includes better security checks and permissions for multiplayer environments. It
allows to execute server commands which can be potentially dangerous if used with malicious intent.
- The update splits the model root data and logic from the rest of the model part data and logic,
- Fixed #725 by separating model root data and logic from the rest of the model part data and logic.
- Fixed #722 by supporting .sbnt files as local presets.
- Fixed #675 by adding dedicated assets for dialog and config screen backgrounds.
- Fixed #605, #532, #529 with new security checks and permissions system.
- Fixed #469, #311 by adding experimental api documentation and examples for custom model support.
- Fixed double rendering of config screen background by removing redundant background rendering.
- Fixed Ghast and Slime hitbox and name tag position issues by adjusting bounding box.
- ⚠️ Added security checks to prevent potential exploits and allow safe usage in multiplayer
- Replaced dynamic dialog screen background with a static one for better performance, customization
- Replaced dynamic config screen background with a static one for better performance.
- Refactored config-ui specific components and removed them from the core mod.
- Removed duplicated sprite sheets.
- Prepare permission system for possible Luck Perms integration in the future like #712.
- General code cleanup and optimizations related to config screen rendering and assets.
### 6.12.0
- Fixed #714 by adding additional checks for custom model part list based on vanilla models.
- Fixed #713 by reducing log verbosity with downgraded per-NPC INFO messages to DEBUG and
- Fixed #711 by reduced oversized startup/config log output.
- Fixed NBT validation guard to prevent unnecessary buffer allocations in production.
- Added model part name constants to EasyNPCModelManager for consistent usage across mixins.
- Improved RenderEntityTypeSupportConfig by enhancing filter logic and optimizing data structures
- Removed verbose debug logs that dump large data structures.
### 6.11.1
- Fixed #710 by improving backward-compatible parsing for recoverable trade data.
### 6.11.0
- Fixed #703 rendering issue with new custom layer system and hand renderings.
- Fixed #701 by adding additional safeguards and logging for invalid trading offers.
- Fixed smart animation not working properly with modified head position.
- Fixed head tracking by moving player detection back to server side-only.
- Fixed CustomLookAtPlayerGoal to better handle edge cases and reduce jitter.
- Fixed issue with Doppler NPCs keeping their hand inventory.
- Improved PoseManager logging message.
- Updated logo with a new design.
### 6.10.0
- Fixed #698 by adding try and catch for 3rd party entity creation.
- Fixed #695 by clearing model part rotations/positions when switching to a
DEFAULTvanilla pose. - Fixed #695 by applying lock rotation and pose animation only when the NPC is idle.
- Fixed #695 by correcting root rotation pivot to use actual bounding box height instead of 0.5f.
- Fixed multiple objective registration issues including inverted
isTargetedPlayercheck, wrong
targets.
- Fixed goal reference being retained after objective is unregistered.
- Removed auto-lock of ROOT rotation when loading poses; root lock is now user-controlled.
- Added lock rotation checkbox to the advanced and custom pose configuration screens.
- Added model-specific pose key filtering in
ConfigurationMenuHandlerfor the default pose screen. - Added unit tests for
CustomPosition,CustomRotation,CustomScale,ModelPose,
ModelAnimationBehavior and ModelAnimationData.- Added
NPCDataIsolationTestHelperand game tests for Fabric and Forge. - Increased max head yaw range from 60° to 65°.
### 6.9.0
- Fixed #692, #666 by adding caching and safeguards to prevent redundant retriggering of NPC entity
- Fixed #651, #617 by adding basic custom poses for all supported NPC types.
- Fixed #597 by adding additional Flee goals for fleeing from players, villagers, monsters, ...
- Fixed pose loading to read directly from mod resources instead of copying files to disk.
- Fixed duplicate
saveNPCcalls on entity join by checking existing registry entry first. - Added
despawnandspawncommands to remove and re-spawn NPCs by UUID with configurable removal
- Added
ModelPoseAPIandEasyNPCEntityHandlerpublic API classes for controlling NPC poses and
- Added pose data files for all supported NPC types.
- Added lock rotation checkbox to the basic pose configuration screen.
- Added
MoveToPositionGoalto move an NPC to a position before executing a callback action. - Added
EasyNPCLookControlandEasyNPCBodyRotationControlto respect locked root rotation. - Added synced owner change and dimension change to the NPC entity data index.
- Added EasyNPCItemAttachmentLayer into various entity renderers.
- Added dedicated
Flee Objectiveconfiguration tab with objectives for fleeing creepers, monsters,
- Added
FOLLOW_ITEMobjective to the follow objectives tab to make NPCs follow item entities by
minecraft:apple).- Added
LookAtEntityByUUIDGoaland enabled the look-at-entity-by-UUID and look-at-owner objectives
- Added
persistentflag toSynchedDataIndexso that transient indices (e.g. crossbow charge,
- Added configurable
customParticlesEnabledflag toSlimeBasefor API consumers. - Added
SoundType.PETand mappedCAT_PURRto the cat NPC for tamed ambient sound variety. - Reduced log verbosity for periodic NPC save operations from INFO to DEBUG.
### 6.8.3
- Fixed #680 by enforcing version miss-match by upgrading network protocol version.
- Fixed #679 by resetting position, rotation and size for name tag.
- Fixed #665 by adding multi state slide for root rotations.
- Fixed #664 by adding option to disable following mouse cursor for easier posing.
- Fixed #663 by improve support for X and Z root rotations.
- Fixed #661 by adding quick rotation with NPC wand and sneaking to the NPC to rotate the root to
- Fixed move tool is wrongly triggering interactions by adding check for move tool in interaction
- Fixed Preset Item is wrongly triggering interactions by adding check for preset item in
- Fixed Slime and Ghast hitbox and name tag position issues by adjusting bounding box and eye height
- Fixed Slime and Ghast GUI position by adjusting offset values.
### 6.8.2
- Fixed #677 by extending
SafeMerchantDatawith notifyTrade to avoid crashes. - Added progression data support for leveling up NPCs based on player interactions and actions.
- Added global NPC tracking system for better management and debugging of NPCs across the world.
- Added
OriginalModelConfig.withVariantTexture()option to allow using variant textures with the
### 6.8.1
- Fixed #676 by using existing preset helper method instead of custom one.
### 6.8.0 (Adding API support)
- Fixed #667 by adding warning messages and additional checks for invalid network packets.
- Fixed Horse spawn eggs model.
- Fixed pose support for allay, chicken, creeper, fox, ghast, horse, illager, iron golem, slime and
- Added NPC base classes for better API support.
- Added NPC raw classes for advanced API support.
- Added Slim and Ghast NPC types.
- Added Custom Model API for easier integration with other mods and custom models.
- Refactored internal data handling and registration for better maintainability and future
### 6.7.1
- Fixed #657 and #656 by adding additional client side checks for vanilla bug.
### 6.7.0
- Fixed #650 by implementing Wolf Leg Animations in setupAnim method.
- Fixed #648 by fixing canBeHitByProjectiles translation.
- Fixed #645 by adding
allowBypassInvulnerabilityconfig option to allow/deny bypassing
- Fixed delete button showing label even with small width.
- Fixed up and down buttons not positioned correctly in some cases.
- Fixed name tag showing up for dialog and configuration UI.
- Fixed distance action issue were multiple actions are not properly triggered.
- Fixed issues with NPC presets.
- Fixed Cat NPC and Wolf NPC owner data not syncing properly.
- Added preset browser for easier selection of common NPC presets.
- Added preset .snbt (text) export and import functionality for sharing NPC presets.
- Refactored existing NPC presets to use new .snbt format.
- Refactored spawner system to use new preset format for better maintainability and future
### 6.6.2
- Fixed #643 by rework scaling system.
- Fixed scaling not properly updating hitbox and nametag position after restart / reload.
- Added MID and MOUSE_OVER name tag visibility modes for finer control over NPC name display.
- Added team-based name tag visibility support respecting vanilla Team.
### 6.6.1
- Fixed #638 by refactored internal data handling for display attributes.
### 6.6.0
- Fixed #634 by implementing asynchronous texture loading with dedicated thread pool.
- Fixed texture loading blocking render thread causing game freezes.
- Fixed race conditions in texture reload protection using atomic operations.
- Fixed resource leaks in HTTP connections during remote texture downloads.
- Fixed URL validation spam allowing multiple simultaneous downloads of the same texture.
- Fixed exception handling for remote image validation preventing crashes on invalid URLs.
- Fixed
defineId called for:warning messages during NPC loading. - Refactored texture loading architecture with multi-level defense and rate limiting.
- Refactored entity data registration logic for better maintainability.
- Converted data classes to modern Java records for better immutability and thread-safety.
- Added thread-safe session server spam protection with ConcurrentHashMap.
- Added comprehensive error recovery with automatic cooldown reset on failures.
- Improved texture loading with 2-thread pool and 500ms rate limiting.
- Improved exception handling with specific catch blocks for IIOException and FileNotFoundException.
### 6.5.2
- Fixed Villager profession and job skin issue.
- Improved GitHub workflows by adding cache for gradle dependencies.
- Improved Gradle build time and cleanup tasks.
### 6.5.1
- Fixed #632 by implementing ON_KILL action type and event.
- Fixed #629 by improving texture handling performance, caching, and memory usage.
- Fixed kill command is not working on NPCs.
- Fixed texture reload protection preventing cache reload after eviction.
- Fixed WebP validation bug in remote image validator (missing return statement).
- Refactored texture handling logic for better maintainability and future improvements.
- Added time-based reload protection (60 seconds) to replace permanent blocking mechanism.
- Added missing variant textures for chicken, pig and wolf.
- Added additional unit tests for texture handling.
- Improved gradle build tasks.
### 6.5.0
- ⚠️ Removed jar-in-jar bundle approach for better mod compatibility and api capabilities.
- Fixed #627 scissor implementation for better compatibility with other mods.
- Fixed #625 lively animation issues when using rotated or moved model parts.
- Fixed default animation are canceled when using scaled model parts.
- Added better pose animation control with smart, default und none options.
### 6.4.1
- Fixed #626 screen switching logic for different NPC UUIDs, thanks to
Spawnbladefor the detailed
### 6.4.0
- Fixed #626 by improving dialog data validation and error handling.
- Fixed #623 by refactoring render data and render handling.
- Fixed #622 by making sure custom data are properly saved and loaded.
- Fixed open dialog action type to allow opening dialogs from other NPCs.
- Fixed hashing issues by adding missing equals and hashCode methods for ConditionDataSet and
- Added custom data test item for #622 and easier testing of custom data.
- Improved records and fixed potential issues with missing data.
### 6.3.0
- Refactored config ui specific components and removed them from the core mod.
- Fixed dialog data by filtering dialog data before sending to the client.
- Fixed dialog editor layout issues and improved usability.
- Fixed missing default values for some dialog data fields.
- Added dialog priority support to control the order of dialog execution.
- Added condition support for dialog and scoreboard actions.
- Added frequency support for dialog to limit how often an dialog can be shown.
- Added new NPC preset to for scoreboard and condition support.
- Improved dialog button data format by removing redundant fields.
### 6.2.0
- Fixed legacy custom name parsing.
- Fixed string injection within dialogs.
- Fixed missing translation for action types.
- Added scoreboard action type to increase, decrease, set scoreboard values.
- Added
@score(...)NPC macro to display scoreboard values in the dialog. - Added additional unit tests.
- Improved spin button with indicators and better usability.
### 6.1.2
- Fixed container and menu sync issues with missing close container packets.
- Fixed close button not working in some cases.
- Fixed jumping mouse cursor between screen transitions.
- Fixed translation files and removed duplicate and deprecated entries.
- Moved Easy NPC wand to existing core item tab instead of creating a new one.
- Added cat pose support for different model parts (except tail).
- Improved EasyNPCWand glowing effect performance by disabling it when not needed.
- Improved custom entity detection by excluding non-living entities like displays, makers, throwns
- Improved cat variant handling.
### 6.1.1
- Fixed #615 by checking if item is equipped in one of the hands.
- Fixed #612 by re-validating entity types.
- Fixed #610 by force sync of hat and head layers for specific models.
- Fixed orc textures.
- Fixed cat variant handling for 1.21.5.
- Fixed player render by adjusting render state
skinfield. - Fixed cat renderer by adjusting render state
texturefield. - Fixed position, scaling and rotation preview.
- Fixed Fairy model.
- Improved custom model support and performance, by moving related logic into to client side only.
- Improved caching of player to UUID mappings for player skins.
- Limited change model commands and logic to Doppler NPCs only.
- Added renderEntityRaw method to render NPC as-it-is.
### 6.1.0 ✨
This is a major release. Please back up your worlds and NPC data before updating. This version
contains many improvements, optimizations, and internal changes that are **not fully compatible**
with earlier releases.
⚠️ Breaking changes
- Existing NPCs and their configuration data from versions before 6.1.0 may not load correctly or
- Internal data formats and some behaviors have been refactored to support new use-cases.
🧩 New modular structure
Easy NPC is now split into three separate mods:
- Easy NPC** – Bundle that includes both Core and Configuration UI for a plug‑and‑play experience.
- Easy NPC: Core** – Lightweight runtime and logic for NPCs, with minimal dependencies. Intended
- Easy NPC: Configuration UI** – Standalone configuration interface for creating and editing NPCs.
🎯 Why this change?
- Allows servers and modpacks to ship only the **Core** mod on the server side for a leaner setup.
- Reduces memory usage and load times when the UI is not required everywhere.
- Makes development and testing faster by separating UI and core logic.
[history]: https://github.com/MarkusBordihn/BOs-Easy-NPC/commits/
[upgrade_guide]: https://github.com/MarkusBordihn/BOs-Easy-NPC/wiki/Upgrading
## Note
This change log includes the summarized changes. For the full changelog, please go to
the [GitHub History][history] instead.
Note: Please always back up your world / NPCs before updating to a new version!
Check the [upgrade guide][upgrade_guide] for more information.
### 7.15.0
- Fixed #838 by keeping preset imports silent when run through
/executeor command blocks. - Fixed #380 by applying the NPC limit to the default spawner as well.
- Fixed #849 by allowing resource pack sounds in the sound configuration.
- Fixed #349 by no longer spawning NPCs left-handed at random.
- Fixed #851 by locking dialog buttons per dialog, not across dialogs with the same label.
- Fixed deleted or duplicated NPCs returning, memory leaks and several owner and UI issues.
- Fixed the Epic Fight Wither Skeleton NPC missing its Epic Fight mob patch.
- Changed requirements: same mod version on client and server, Easy Model Entities 2.5.0+.
- Changed backups of all worlds and killed NPC data to expire after 30 days, see
storage.cfg. - Added "Jump", "Assist Owner" and "Follow Nearest Player" to fix #845, fix #310, fix #761.
- Added an NPC inventory with item pickup and death drops to fix #111, fix #197, fix #543, fix #670.
- Added "Sit on Shoulder", a boss bar and
/easy_npc debug core loglevelto fix #577, fix #219. - Added the "Hold" animation mode, a "Bank Teller" preset and new API methods for addons.
### 7.14.0
- Fixed #846 by keeping custom poses for players who start seeing the NPC later.
- Fixed attribute and trading settings missing for players who start seeing the NPC later.
- Fixed changed max uses, XP and trading type not shown in the trading screens until reload.
- Fixed
/easy_npc sound setchanges not reaching players until the NPC was reloaded. - Added game tests that check NPC poses and settings after respawns and for new players.
### 7.13.0
- Fixed color and formatting tags in dialog button names showing as plain text.
- Fixed the button preview in the editor showing lowercase names as a raw translation key.
- Fixed the "Move EasyNPC" item not working for NPC owners outside of creative mode.
- Fixed
/easy_npc owner setreporting success even when the owner could not be changed. - Fixed the game crashing when the URL or player skin screen showed a skin download error.
- Fixed the preset browser search showing no results after scrolling down the list.
- Changed the network protocol version, so client and server must run the same mod version.
- Added
@initiator,@npcand@score()support to dialog button names to fix #841. - Added automatic client tests with the Client Runtime Interface Toolkit.
- Larger core refactoring and code cleanup.
### 7.12.2
- Fixed the Fairy hitbox being far too small, so its name tag and speech bubble sat in its body.
- Fixed scaled NPCs keeping their old hitbox and eye level, so hits, clicks and looking missed.
- Fixed oversized names, lists and NPC data in network packets being read without any limit.
- Fixed invalid NPC positions, scales, attributes, names and durations from being applied.
- Changed Fairy NPCs to take up the space of their model, so they collide and can be clicked.
- Changed Skeleton, Stray and Bogged NPCs to the vanilla hitbox height, they were slightly short.
- Changed the network protocol version, so client and server must run the same mod version.
### 7.12.1
- Fixed #836 by always showing "Restore", including datapack presets, with a reason tooltip.
- Fixed preset import and export messages missing, wrong or not warning about replaced NPCs.
- Fixed the preset browser reloading on each keystroke, leaking NPCs and clearing the selection.
- Fixed the preset list sorting, filter order and layout clipping options in small windows.
- Fixed
/easy_npc preset import datawithout a position importing it as a default preset. - Fixed spawn rate limit leaks, unstable preset IDs and "Spawn New" stacking NPCs on one spot.
- Changed "Restore" to refuse instead of spawning a copy when it is not permitted.
- Added sorting, a match count, reload, auto-close, the NPC ID and tooltips for presets and skins.
- Added
matching <pattern>batch imports with limits, a confirmation and a clickable position.
### 7.12.0
- Fixed #833 by showing Easy NPC Wand outlines only to the wand holder, owner and admins.
- Fixed #834 by adding "Set Home Here" and "Reset Home" buttons to the position configuration.
- Fixed #835 by keeping the NPC ID and position in exported presets, so imports restore the same
- Fixed preset imports and spawn eggs losing the owner's list entry and owner objectives.
- Fixed NPCs restored from an automatic backup losing their owner and becoming ownerless.
- Fixed selection lists showing only their first six entries and hiding the rest.
- Changed importing a preset to update the original NPC at its stored position instead of adding a
- Changed completed trades to play the "Trade completed" sound, which stayed silent before.
- Changed the API dialog call to report an unknown dialog label instead of always reporting success.
- Changed NPCs without arms to carry held items at the head or body instead of hiding them.
- Changed the optional Easy Model Entities dependency to require version 2.4.0 or newer.
- Added a "Sound" configuration with sounds for dialogs, speech, swimming, eating and fall damage.
- Added a searchable sound selection with volume and pitch sliders to the "Sound" configuration.
- Added a "Block Vehicles" option to keep NPCs out of boats, minecarts and modded chairs.
- Added the profession selection to all skin configurations and a new built-in skin per NPC type.
- Added client settings to hide name tags behind walls and
highlightEnabledfor wand outlines. - Added an "Exists" condition operation and API access to NPC movement, actions and presets.
### 7.11.0
- Fixed #828 by no longer freezing the server on logout when NPCs follow or watch the player.
- Fixed #831 by moving routine NPC removal messages to the debug log.
- Fixed #832 by making humanoid NPCs ignore custom player models, animations and poses.
- Fixed hourly NPC backups stuttering on large worlds and retaining timestamps of removed NPCs.
- Fixed hourly NPC backups losing the identity, owner and position of the backed-up NPC.
- Fixed owner-login restoration duplicating, repeatedly restoring, reviving or moving unloaded NPCs.
- Fixed NPC index and file synchronization issues causing lost NPCs, crashes or false warnings.
- Fixed stale NPC data after unloading, avoided redundant writes and added repeated-unload warnings.
- Fixed the preset browser failing to list custom and world presets saved in the SNBT format.
- Fixed speech bubbles losing their text and turning translucent with Iris shaders.
- Fixed the "Opacity" of an NPC being ignored while a shader pack is active.
- Fixed text formatting and macro parsing for translated speech bubbles and mod API texts.
- Fixed speech bubbles and their text staying hidden behind blocks while a shader pack is active.
- Added
minLightLevelto keep speech bubbles readable in dark surroundings.
### 7.10.0
- Fixed #829 by allowing bats and other non-walking mobs as the render entity of a Doppler NPC.
- Fixed NPCs rendered as a bat, frog or warden showing a static pose instead of their animation.
- Fixed the NPC name tag showing above the previews in the "Custom Models" configuration.
- Fixed speech bubbles being cut off by walls, doorframes and the NPC's own body.
- Fixed the previews in the "Custom Models" configuration.
- Changed the previews in the "Custom Models" configuration to stand on a common ground line.
- Changed overlapping speech bubbles to move apart and to stay visible when the NPC is off-screen.
- Changed "Navigation: Automatic" to use flying movement for NPCs rendered as a flying mob.
- Changed the render entity list to hide seats, paintings, thrown items and other non-mob entities.
- Added a "Min. hover height" slider for flying NPCs and client settings for speech bubbles.
### 7.9.0
- Fixed modded fish NPCs, like the ones of Tide 2, spinning around instead of swimming upright.
- Fixed "Navigation: Automatic" using ground movement for water NPCs and aquatic model NPCs.
- Fixed the "Random Swimming" objective never moving an NPC that uses aquatic navigation.
- Fixed a swimming NPC shaking or twitching in place instead of holding its tilt and swim depth.
- Fixed a swimming NPC turning in circles forever when it could not reach its next path point.
- Fixed an NPC that fell into water never getting out of it again.
- Fixed a following NPC searching a new path every tick while its target was unreachable.
- Fixed the "Move to" actions stopping short of a raised target or not starting while in the air.
- Fixed "Move back to Home" ignoring height differences and never returning from beyond 32 blocks.
- Fixed the "Opacity" input field being too narrow to show a value of 100.
- Fixed a damaged NPC with an Easy Model Entities model never flashing red.
- Changed modded water NPCs to swim level, vanilla water mobs keep their tilt as before.
- Changed the "Move to" actions to walk up to 48 blocks and to teleport only beyond that range.
- Changed "Move to" and "Move back to Home" to give up after three seconds without progress.
- Changed the timeout of a "Move to" action to count real ticks, it ran twice as long before.
- Changed a new "Random Swimming" objective to rank below following, fleeing and attack goals.
- Changed "Opacity" of an NPC with an Easy Model Entities model to be applied by that mod itself.
- Changed the minimum Easy Model Entities version to 2.3.0, older versions disable the integration.
- Added "Depth below surface" and "Height above floor" sliders for the swim level of an NPC.
- Added log entries for the NPC files written on a world save, with a warning above 250 ms each.
### 7.8.1
- Fixed #827 by rendering fish NPCs in water upright instead of always flopping on their side.
- Fixed #828 by keeping a damaged NPC from blocking the world save, it now falls back to defaults.
- Fixed a restored NPC picking up a random preset ID that changed with every save.
- Changed NPC data to only be written to disk when it actually changed.
### 7.8.0
- Fixed smaller text and UI issues.
- Changed an NPC that is already standing at its target position to finish the movement right away.
- Changed the "None" skin tab to "Advanced", which now holds "Disable Skin" and the texture field.
- Added a "Move to" action, which sends an NPC to a position, a player, its owner or its home.
- Added a "Move to and Wait" action, which runs the following actions only after the arrival.
- Added an arrival radius, a timeout and an optional teleport to both move actions.
- Added an "Opacity" attribute from 0 to 100, which fades body, armor and hand items together.
- Added a "Set Opacity" action, which turns an NPC into a ghost or hides it completely.
- Added the "Lantern Wraith" preset, a ghost walking a square with a short line at every corner.
- Added API access to the move actions and the opacity of an NPC.
- Added a "Resource Location" skin type, which renders any texture of a mod or a resource pack.
- Added an "Advanced" skin tab, which previews the NPC with the entered texture before applying it.
### 7.7.7
- Fixed #821 by keeping the transparency of 64x64 skins, which Fresh Moves needs for its eyes. Skins
- Fixed #818 by running trade actions for Villager and Wandering Trader NPCs as well.
- Fixed a dialog with several text variants switching its speech bubble size every second.
- Fixed the skin cache storing the processed image instead of the original download.
- Fixed the untranslated interval names, like
PER_DAY, of the "Execution Limit" condition. - Fixed the
sitanimation of Easy Model NPCs, which never used the built-in sitting pose. - Fixed the speech bubble being cut off by the head of an NPC when a player stood close to it.
- Changed speech bubbles to keep their screen size and to move down or aside when a player is close.
- Changed the speech bubble text to render 20% larger than a name tag.
- Changed a time based action set with a "Wait" action to run in order instead of picking one entry.
- Changed dialog texts to wrap later, so an existing dialog can switch to the wider screen layout.
- Changed fallback actions to skip screen actions without a player, like the regular actions do.
- Changed the minimum Easy Model Entities version to 2.1.0, older versions disable the integration.
- Added a "Wait" action, which pauses the following actions of an event for a chosen duration.
- Added the "Countdown Timekeeper" preset, a speech bubble count to ten ending in sound and sparks.
- Added scaling and rotation for Doppler NPCs behind the "Experimental Features" checkbox. Both only
- Added a "Sound" action, which plays a sound at the NPC with sound category, volume and pitch.
- Added "Every 5 Minutes" and "Every 15 Minutes" to the "Execution Limit" condition.
- Added a "Player Idle" condition, which checks how long a player has not moved.
- Added an "Immovable" attribute, which keeps an NPC in place against pushing and knockback.
- Added
/easy_npc pauseto pause a single NPC or all NPCs; the global pause ends with the server. - Added API access to the sound action, the pause state and the idle time of a player.
- Added a texture override per model slot for Easy Model NPCs over
/easy_npc render texture. - Added a "Repeat" playback mode with a count and a time limit to the "Play Animation" action.
- Added API access to animation variants, texture slots and textures of Easy Model NPCs.
### 7.6.0
- Fixed unclear mod conflict errors for duplicate entity data tracker IDs.
- Fixed third-party health bars rendering over NPC previews in configuration and dialog screens.
- Fixed Doppler and Easy Model Entities NPCs using default hitboxes instead of their model size.
- Fixed the
/easy_npccommands suggesting no NPC UUIDs at all on a server. - Fixed the pose list of the "Set Pose" action drawing over its input field.
- Fixed the untranslated "Loop", "After current" and "Action Data Type" labels of the action editor.
- Fixed the missing hint text of the "Chance" condition.
- Fixed long condition hints running out of the editor screen instead of wrapping.
- Fixed the misaligned help icons and text buttons of the "Message" action.
- Fixed changes to the "Set Pose", "Play Animation" and "Stop Animation" actions not being saveable.
- Fixed the speech bubble text sitting closer to its upper border than to its lower one.
- Changed the NPC suggestions to list the crosshair NPC first and only own NPCs without permissions.
- Changed a preset export to only store what differs from a new NPC, without position or owner.
- Changed a preset without objectives or actions to fall back to the defaults of its NPC type.
- Changed events without a player, like "On Spawn" or "On Kill", to check their conditions. An
- Changed a time based action to pick the owner as
@initiatorwhenever the owner is nearby. - Changed speech bubbles to stay visible from 5 up to 18 seconds, depending on the text length.
- Changed the "Set Pose" action to only show its input field for the "custom" pose entry.
- Added time based actions on five fixed steps, from every ~1 second up to every ~15 minutes.
- Added a "Message" action for chat, system message and speech bubble text without a command.
- Added text variants, a sender name, a recipient and translation keys to the "Message" action.
- Added the speech bubble graphic as
easy_npc:textures/gui/speech_bubble.pngfor resource packs. - Added a "Chance" condition in percent and a "Relationship" condition for owner and faction.
- Added spawn, owner login, state change, day / night, weather and the missing "On Trade" events.
- Added a base preset per NPC type under
easy_npc:api/preset/base/, usable as a parent preset. - Added the "Wandering Companion" preset, a talkative NPC built from time based messages.
- Added an action registry, an action handler, a preset validator and richer event data for mods.
- Added a tooltip with name, type and distance to every NPC suggestion of the
/easy_npccommands. - Improved the NPC suggestions, which appear without typing and tolerate a near miss of one block.
### 7.5.0
- Fixed the home position of an NPC always reading as unset, which hid "Home" in the configuration
- Fixed NPCs spawned from a preset, the preset browser or a respawn never getting a home position.
- Fixed an NPC spawned from the preset browser keeping the home position of the world the preset was
- Fixed NPCs being drawn as a white silhouette with a shadow in the configuration, skin and preset
- Fixed #814 by giving every Cobblemon NPC its own animation state instead of one per species.
- Fixed #813 by letting "Move back to Home" work at any distance instead of only near its home.
- Fixed #812 by checking once per session whether a player changed their skin.
- Fixed #810 by accepting Cobblemon aspects of resource packs instead of only "shiny" and "female".
- Fixed the server crashing when an NPC with a "Tempt" objective ticked its goals.
- Fixed flying NPCs like Allay, Vex and Ghast moving on the ground instead of flying.
- Fixed dialog, button, preset, pose and texture names with duplicates or special characters.
- Fixed conditions not being editable on a dedicated server and untranslated condition texts.
- Fixed Easy Model Entities NPCs not turning their head and their model list ignoring a
/reload. - Fixed the "Legacy Easy NPC Data" warning appearing for newly created NPCs.
- Fixed missing transparency corrections for old 64x32 skins, which showed layer artifacts.
- Fixed the player skin screen freezing for a moment while a player name was looked up.
- Fixed the "Reset look at ..." objective label, which read "Reset loot at ..." in some languages.
- Fixed the Fabric game tests, which crashed on start because of the development helper mods.
- Fixed NPCs losing their owner when they were spawned again after a despawn.
- Fixed objectives being deleted from an NPC when the mod providing them was missing at start.
- Fixed objectives being switched off for good when their target entity was missing.
- Fixed importing a preset without a stored id, which spawned an NPC without owner and home.
- Fixed "Follow owner" and "Look at owner" keeping their old target after the owner was changed.
- Fixed attack targets staying assigned to an NPC after the targeted entity was gone.
- Fixed the "Look at Item" objective, which could be stored but never did anything.
- Fixed walking animation for Doppler NPC and 3rd party models.
- Fixed Forge never running its server start-up step, which left NPC tracking, factions and the
- Fixed Forge development runs starting without any mixins, which disabled the vanilla entity
- Changed the movement objectives to a fixed order: flee, follow, return home, then stroll. NPCs
- Changed datapack presets to
easy_npc/preset/, the old folder still works, but only for easy_npc. - Changed the preset browser to always list its entries in the same order.
- Changed the required Easy Model Entities version to 1.7.0, floating models now hover by default.
- Removed the experimental user-defined NPCs; the extra config file is no longer read or created.
- Removed the unused
SERVER_SKINskin type. - Added new gametest strcuture to support gametest in 1.21.11 and higher.
- Added a reload button to each entry of the player skin screen, to fetch a single skin again.
- Added the reason to the log whenever an NPC is removed, so an unexpected despawn can be traced.
- Added suggestions to
/easy_npc render set species. - Added support for presets from other mods, which no longer have to use the
easy_npcnamespace. - Added a preset visibility that hides a preset from the preset browser and the NPC screens.
- Added a teleport distance and a resting spot offset to the follow objectives.
- Added item tags, a "can be scared" option and a "only without owner" option to "Follow item".
- Added an item field to the look objectives, so an NPC can watch a chosen dropped item.
- Added an identifier per NPC, so a mod can find its own NPCs again.
- Added an option to spawn an NPC again when its owner logs in.
- Added NPC states with number, yes/no and text values, usable as condition, action and command.
- Added a "Navigation" and a "Hover height" setting to switch any NPC between ground and flying.
- Added a parent preset reference, so a preset can build on another one and only override changes.
- Added the state driven "Forge Keeper" preset.
- Added custom conditions and dialog, action and state events for other mods.
- Added "On Far Distance" as a distance action, which triggers at 32 blocks.
- Added game tests for NeoForge, which had none, and restored the spawn egg, dialog screen, data
- Added game tests for every configuration and editor screen, covering all three mod loaders.
- Added game tests for the home position, covering the spawn default, the stored value and
- Improved the model name parsing, which mistook a species ending in "_shiny" for a variant.
- Improved following of flying NPCs, which now steer directly when there is no path through the air.
- Improved floating Easy Model Entities models, which now bob up and down.
- Improved third party support with an API for presets, own objectives and objective configuration.
### 7.4.0
- Fixed #807 by no longer pulling every same-type NPC within 32 blocks into a "Defend Self" fight.
- Fixed #805 by evaluating all visibility settings together instead of stopping at the first one.
- Fixed #804 by keeping the custom name on Doppler NPCs for name based textures and the name tag.
- Fixed #803 by adjusting assets to match typical Minecraft style instead of generic UI style.
- Fixed the day and night detection, which counted sunrise as night and sunset as day.
- Fixed the visibility in the Nether and the End, which used the Overworld time.
- Fixed the time and game mode visibility checkboxes appearing in a random order.
- Fixed game tests only being able to fail on their first assertion, which hid later failures.
- Fixed the "Saddled" horse skin variants, which never showed a saddle.
- Changed "Visible to Owner" and "Visible to Team" to also follow day, night and game mode.
- Changed Evoker, Illusioner and Vindicator variants without "Crossed Arms" to keep their arms down.
- Added a "Defend Faction" objective that attacks whoever hurt a nearby faction member or player.
- Added a system message when faction members fight each other and the faction stays out of it.
- Added a head equipment slot for Illagers so their captain banner can be removed or swapped.
- Added a day and night preview to the display configuration screen.
- Added unit and game tests for the visibility attributes and the faction defense.
- Improved the visibility check performance by reading the display attributes only once per check.
- Improved display attributes from older versions by completing them with their defaults.
- Improved the attack objective screen by disabling "Protect Owner" and "Defend Faction" when unset.
### 7.3.0
- Improved skin variants by carrying their data as typed fields instead of parsing variant names.
- Centralized the Cobblemon mod id and default model on shared constants.
- Reduced duplicated enum code with a shared
EnumUtilshelper forget(String)lookups. - Optimized villager profession and type lookups to use direct registry keys instead of scans.
- Optimized enum name lookups by caching tag names, ids and keys once at construction.
- Added unit and game tests for skin variants, villager resolution and the enum helper.
### 7.2.0
- Fixed #801 by using combination for NPC, Dialog and Action UUIDs to avoid collisions for action
### 7.1.1
- Fixed #800 by lazy loading entity types.
- Fixed #799 by fixing edge cases and adding additional documentation and better log messages.
- Fixed #798 by considering console, commands and command blocks as trusted command sources.
- Fixed a critical single-player / LAN issue where client and server NPCs shared the same registry.
- Fixed a memory leak in the configuration menu handling and added timeout and disconnect cleanup.
- Fixed duplicate downloads when several NPCs request the same skin at the same time.
- Fixed skin lookups failing after a error so a slow server no longer freezes the game.
- Fixed the URL skin screen freezing the game while checking a remote image; the check now runs in
- Added a new World Spawner block that limits an NPC preset across the whole world (all dimensions),
- Hardened remote skin downloads with a strict size limit and safe redirect handling to prevent
blockPrivateAddresses setting.- Improved server performance by only sending entity and player load events to NPCs that actually
### 7.0.0
- Fixed #794 by using the expected type for NPC rendering.
- Fixed #791 by adding Wandering Trader NPC type.
- Fixed #788 by extending the AI safeguards to Epic Fight and raw NPC variants (Piglin, Villager,
- Fixed #787, #531, #237 and #184 by adding a faction system with
/easy_npc factioncommands,
- Fixed #787, #771 and #572 by adding a new
targetobjectives tab to attack hostile factions or
- Fixed #786 by adding gender and shiny model variants for Cobblemon NPCs, searchable via
female
shiny in the model selection.- Fixed faction combat between invulnerable NPCs by adding the new
Attackable by Factionscombat
- Fixed Cobblemon model selection previews for oversized species by scaling with Cobblemon's own
- Fixed faction management edge cases by validating faction names, sorting faction lists and
- Fixed custom skin reloads by loading and clearing texture caches per skin model instead of always
- Improved the
Attackable by Players/Monsters/Factionscombat attributes to work independently of
Invulnerable, each opening a targeted hole for its own attacker group.- Improved preset command and network handling by splitting the large handlers into smaller focused
- Added Easy Model Entities Support.
- Added faction manager and faction editor screens to create, color and delete factions and manage
FACTION_MANAGEMENT security feature.- Added new
Miscattributes tab as home for the NPC faction assignment. - Added reusable warning and help icon components for inline hints with tooltips.
- Added additional unit and game tests for factions, target objectives and Cobblemon model variants.
### 6.25.0
- Fixed #782, #636, #622 by preserving data components during validations.
- Fixed #780 by caching remote texture downloads and reducing duplicate registrations.
- Fixed #767 by clamping attribute sliders against extreme values from other mods.
- Fixed #754 by adding custom data item matching for NPCs with actions and conditions.
- Fixed texture manager running in the wrong thread may cause crashes and deadlocks in >= 1.21.x.
- Fixed empty UUID handling for action conditions.
- Fixed execution limit reset for actions.
- Added texture registration queue to avoid multiple simultaneous downloads in the same tick.
- Added NPC coin, key and red token as consumable items for NPCs with actions and conditions.
- Added
Welcome Coin Traderas example NPC preset with custom coin, key and red token item data. - Added attribute safeguards against extreme values from other mods.
- Increased fallback max health value from 1024 to 4096 for high-health NPCs.
- Improved texture manager by reducing duplicate texture checks and registrations.
### 6.24.0
- Fixed #459, #775 by adding an option to block interactions with invisible NPCs.
- Fixed #774 startup crash related to optional Epic Fight and Cobblemon entity type maps.
- Fixed #773 by checking timed trade resets during base ticks and before opening trade screens.
- Fixed trade reset timing by increasing internal tickers correctly.
- Added time of day and weather conditions for #459.
- Added additional unit and game tests for trade resets, ticker handling and entity attributes.
- Added
Skywatch Scoutas example NPC preset with time of day and weather conditions.
### 6.23.0
- Fixed #772 by adjusting texture retries with 403 and 404 errors and lowering logging.
- Fixed #770 item rendering for Epic Fight NPCs (Evoker, Pillager, Vindicator and humanoid skins).
- Fixed #769 door loops with NPCs not reliably opening or closing doors.
- Fixed #760 by adding a dialog option and config setting (buttonConditionMode: LOCK or HIDE) to
- Fixed #709 by adding color picker popup for names with 32 colors and/or a manual RGB/hex value.
- Fixed NPC name color being reset when renaming without a specified color by preserving the
- Improved the door movement attributes so "Pass Door" is automatically enabled while "Open Door"
### 6.22.0
- Fixed #766 by passing the full server player context to command execution for better compatibility
- Fixed #764 by adding entity health, npc health conditions and NPC preset
Grukk, the Sparring Post as example for using these conditions.- Fixed #763 by making sure dialog button execution limits are now recorded.
- Fixed #758 by providing a example NPC preset named
One Wish Companion. - Fixed crashes related to 3rd party villager AI reading non-registered brain memories on Easy NPC
- Fixed Dialog buttons are not locked for server-side data as preparation for #760 and #644.
- Fixed #628 by adding conditional dialog opening support / command for better control over when
- Added brain AI for Piglin and Piglin Brute NPCs and registered the full vanilla brain memory set.
- Added additional guns to the gun tag for #757.
- Added a new "Open Dialog (Conditional)" action that opens a named dialog only if its conditions
- Added new entity health and npc health conditions for actions, dialogs and dialogs buttons.
- Added Piglin, Piglin Brute and Zombified Piglin NPCs invulnerable, for consistency with other
- Added a new "Knockback Immunity" combat attribute that prevents the NPC from being knocked back by
- Added a new "Explosion Immunity" combat attribute that makes the NPC immune to explosion damage
- Moved the "Projectile Collision" attribute to the Combat attribute screen, where it fits better
### 6.21.0
- Fixed item attachment for Illagers in crossed-arms pose.
- Fixed broken illager crossbow attack goal.
- Fixed crashes related to 3rd party items which are not renderable as hand items #756.
- Fixed crashes related to 3rd party mixins trying to access non-existing model parts #756.
- Fixed log.info spam message by reducing log verbosity and adding additional checks for custom
- Improved EasyNPCModelManager performance.
- Refactored NPC renderers to remove default hand item layer.
### 6.20.0
- Fixed crashes related to 3rd mods trying to access non-existing NPCs goals.
### 6.19.0
Note: This update adjusted the dialog background images by 10x6 pixels, which may require users to
adjust their custom dialog backgrounds if they are using custom ones.
- Fixed #752, #130 by adding dialog button condition support to allow to disable buttons.
- Fixed #683, #215 by adding typewriter effect support for dialog text.
- Fixed #690, #309 by allowing conditions for dialog, dialog buttons and interactions.
- Fixed smaller UI issues with dialog screen layout and background.
- Refactored dialog background images by 10x6 pixels on each side.
- Refactored dialog screen layout to better fit the new background size and improve appearance.
- Added typewriter effect and client configuration for dialog text.
- Added condition symbols to indicate the condition status for dialog, buttons and interactions.
- Added amount field for item conditions to allow checking for specific amounts of items.
- Added
Threshold Wardenas example NPC preset with various conditions and actions. - Added smaller bug fixes and optimizations related to dialog conditions and button states.
### 6.18.0
Note: This update changes the internal data format for conditions and actions, which may reset /
remove legacy existing execution-limit entries without stored IDs.
- Fixed #745 by adding conditions for actions to allow more complex and dynamic behavior.
- Fixed #652 by adding dialog button tooltip for longer texts.
- Fixed #687 by adding command value tooltip to show the full value.
- Added Experience Level conditions.
- Added Game-mode conditions.
- Added has item in inventory condition.
- Added has item in hand condition with (main hand and off-hand) support.
- Added player health condition.
- Added player tag condition.
- Added player team condition.
- Added Goldmere example NPC preset with various conditions and actions.
- Added negative condition support to allow negating conditions for more complex logic.
- Removed parameter pseudo IDs for
ActionDataEntryand replaced them with random UUIDs. - Refactored condition system to allow more condition types.
### 6.17.0
- Fixed #738 by adding additional tooltips for "Execute as player"
- Fixed to detailed logs by reducing log.info messages during startup and in-game.
- Added additional unit and game-tests.
### 6.16.0
- Fixed #732 by providing option to disable ESC key and close button for dialogs.
- Fixed #723 by avoid auto-close in specific cases like trading screens.
- Added general dialog configuration options to allow users to customize dialog behavior.
- Added avatar scaling and position offset options for dialogs.
- Added missing translation keys.
### 6.15.0 (Trades, Player Heads, Epic Fight and QOL updates)
- Fixed #731 by resyncing species data, if species list is empty on the client.
- Fixed #730 by improving Epic Fight integration and enabled experimental features.
- Fixed #729 by making sure trade uses are stored correctly.
- Fixed #728 by adding custom head support for player heads.
- Fixed #689 by showing remaining trade uses and allow resetting manually and automatically.
- Fixed #218 and #132 with new trade configuration screen and better support for custom trades.
- Fixed trade specific edge by switching between basic and normal/advanced trading mode.
- Fixed dialog button text is truncated with tooltip showing the full text.
- Fixed Cobblemon animation issues by syncing animation state with Cobblemon Animation System.
- Added per trade specific actions to allow users triggering actions after buys.
- Added trade reset button to reset all trades easily.
- Added trade usage information to trade configuration screen.
- Added experimental feature state to allow users to manually enable experimental features.
- Added Griselda Grindstone as example trader with actions.
- Cleanup test files.
### 6.14.0
- Fixed #727 by making sure changes are synced to the client when changing values.
- Fixed #726 by adding additional allow lists for specific commands.
- Fixed #686, #389, #304, #211 by adding basic Cobblemon support with Cobblemon NPC.
- Fixed dialog misalignment and navigation issues by adjusting dialog sprites and screens.
- Fixed x and z root rotation by correcting rotation logic and pivot calculations.
- Added basic Cobblemon support with custom NPC type and model for testing.
### 6.13.0 (Security and Permissions Updates)
Notes: This update includes better security checks and permissions for multiplayer environments. It
allows to execute server commands which can be potentially dangerous if used with malicious intent.
- The update splits the model root data and logic from the rest of the model part data and logic,
- Fixed #725 by separating model root data and logic from the rest of the model part data and logic.
- Fixed #722 by supporting .sbnt files as local presets.
- Fixed #675 by adding dedicated assets for dialog and config screen backgrounds.
- Fixed #605, #532, #529 with new security checks and permissions system.
- Fixed #469, #311 by adding experimental api documentation and examples for custom model support.
- Fixed double rendering of config screen background by removing redundant background rendering.
- Fixed Ghast and Slime hitbox and name tag position issues by adjusting bounding box.
- ⚠️ Added security checks to prevent potential exploits and allow safe usage in multiplayer
- Replaced dynamic dialog screen background with a static one for better performance, customization
- Replaced dynamic config screen background with a static one for better performance.
- Refactored config-ui specific components and removed them from the core mod.
- Removed duplicated sprite sheets.
- Prepare permission system for possible Luck Perms integration in the future like #712.
- General code cleanup and optimizations related to config screen rendering and assets.
### 6.12.0
- Fixed #714 by adding additional checks for custom model part list based on vanilla models.
- Fixed #713 by reducing log verbosity with downgraded per-NPC INFO messages to DEBUG and
- Fixed #711 by reduced oversized startup/config log output.
- Fixed NBT validation guard to prevent unnecessary buffer allocations in production.
- Added model part name constants to EasyNPCModelManager for consistent usage across mixins.
- Improved RenderEntityTypeSupportConfig by enhancing filter logic and optimizing data structures
- Removed verbose debug logs that dump large data structures.
### 6.11.1
- Fixed #710 by improving backward-compatible parsing for recoverable trade data.
### 6.11.0
- Fixed #703 rendering issue with new custom layer system and hand renderings.
- Fixed #701 by adding additional safeguards and logging for invalid trading offers.
- Fixed smart animation not working properly with modified head position.
- Fixed head tracking by moving player detection back to server side-only.
- Fixed CustomLookAtPlayerGoal to better handle edge cases and reduce jitter.
- Fixed issue with Doppler NPCs keeping their hand inventory.
- Improved PoseManager logging message.
- Updated logo with a new design.
### 6.10.0
- Fixed #698 by adding try and catch for 3rd party entity creation.
- Fixed #695 by clearing model part rotations/positions when switching to a
DEFAULTvanilla pose. - Fixed #695 by applying lock rotation and pose animation only when the NPC is idle.
- Fixed #695 by correcting root rotation pivot to use actual bounding box height instead of 0.5f.
- Fixed multiple objective registration issues including inverted
isTargetedPlayercheck, wrong
targets.
- Fixed goal reference being retained after objective is unregistered.
- Removed auto-lock of ROOT rotation when loading poses; root lock is now user-controlled.
- Added lock rotation checkbox to the advanced and custom pose configuration screens.
- Added model-specific pose key filtering in
ConfigurationMenuHandlerfor the default pose screen. - Added unit tests for
CustomPosition,CustomRotation,CustomScale,ModelPose,
ModelAnimationBehavior and ModelAnimationData.- Added
NPCDataIsolationTestHelperand game tests for Fabric and Forge. - Increased max head yaw range from 60° to 65°.
### 6.9.0
- Fixed #692, #666 by adding caching and safeguards to prevent redundant retriggering of NPC entity
- Fixed #651, #617 by adding basic custom poses for all supported NPC types.
- Fixed #597 by adding additional Flee goals for fleeing from players, villagers, monsters, ...
- Fixed pose loading to read directly from mod resources instead of copying files to disk.
- Fixed duplicate
saveNPCcalls on entity join by checking existing registry entry first. - Added
despawnandspawncommands to remove and re-spawn NPCs by UUID with configurable removal
- Added
ModelPoseAPIandEasyNPCEntityHandlerpublic API classes for controlling NPC poses and
- Added pose data files for all supported NPC types.
- Added lock rotation checkbox to the basic pose configuration screen.
- Added
MoveToPositionGoalto move an NPC to a position before executing a callback action. - Added
EasyNPCLookControlandEasyNPCBodyRotationControlto respect locked root rotation. - Added synced owner change and dimension change to the NPC entity data index.
- Added EasyNPCItemAttachmentLayer into various entity renderers.
- Added dedicated
Flee Objectiveconfiguration tab with objectives for fleeing creepers, monsters,
- Added
FOLLOW_ITEMobjective to the follow objectives tab to make NPCs follow item entities by
minecraft:apple).- Added
LookAtEntityByUUIDGoaland enabled the look-at-entity-by-UUID and look-at-owner objectives
- Added
persistentflag toSynchedDataIndexso that transient indices (e.g. crossbow charge,
- Added configurable
customParticlesEnabledflag toSlimeBasefor API consumers. - Added
SoundType.PETand mappedCAT_PURRto the cat NPC for tamed ambient sound variety. - Reduced log verbosity for periodic NPC save operations from INFO to DEBUG.
### 6.8.3
- Fixed #680 by enforcing version miss-match by upgrading network protocol version.
- Fixed #679 by resetting position, rotation and size for name tag.
- Fixed #665 by adding multi state slide for root rotations.
- Fixed #664 by adding option to disable following mouse cursor for easier posing.
- Fixed #663 by improve support for X and Z root rotations.
- Fixed #661 by adding quick rotation with NPC wand and sneaking to the NPC to rotate the root to
- Fixed move tool is wrongly triggering interactions by adding check for move tool in interaction
- Fixed Preset Item is wrongly triggering interactions by adding check for preset item in
- Fixed Slime and Ghast hitbox and name tag position issues by adjusting bounding box and eye height
- Fixed Slime and Ghast GUI position by adjusting offset values.
### 6.8.2
- Fixed #677 by extending
SafeMerchantDatawith notifyTrade to avoid crashes. - Added progression data support for leveling up NPCs based on player interactions and actions.
- Added global NPC tracking system for better management and debugging of NPCs across the world.
- Added
OriginalModelConfig.withVariantTexture()option to allow using variant textures with the
### 6.8.1
- Fixed #676 by using existing preset helper method instead of custom one.
### 6.8.0 (Adding API support)
- Fixed #667 by adding warning messages and additional checks for invalid network packets.
- Fixed Horse spawn eggs model.
- Fixed pose support for allay, chicken, creeper, fox, ghast, horse, illager, iron golem, slime and
- Added NPC base classes for better API support.
- Added NPC raw classes for advanced API support.
- Added Slim and Ghast NPC types.
- Added Custom Model API for easier integration with other mods and custom models.
- Refactored internal data handling and registration for better maintainability and future
### 6.7.1
- Fixed #657 and #656 by adding additional client side checks for vanilla bug.
### 6.7.0
- Fixed #650 by implementing Wolf Leg Animations in setupAnim method.
- Fixed #648 by fixing canBeHitByProjectiles translation.
- Fixed #645 by adding
allowBypassInvulnerabilityconfig option to allow/deny bypassing
- Fixed delete button showing label even with small width.
- Fixed up and down buttons not positioned correctly in some cases.
- Fixed name tag showing up for dialog and configuration UI.
- Fixed distance action issue were multiple actions are not properly triggered.
- Fixed issues with NPC presets.
- Fixed Cat NPC and Wolf NPC owner data not syncing properly.
- Added preset browser for easier selection of common NPC presets.
- Added preset .snbt (text) export and import functionality for sharing NPC presets.
- Refactored existing NPC presets to use new .snbt format.
- Refactored spawner system to use new preset format for better maintainability and future
### 6.6.2
- Fixed #643 by rework scaling system.
- Fixed scaling not properly updating hitbox and nametag position after restart / reload.
- Added MID and MOUSE_OVER name tag visibility modes for finer control over NPC name display.
- Added team-based name tag visibility support respecting vanilla Team.
### 6.6.1
- Fixed #638 by refactored internal data handling for display attributes.
### 6.6.0
- Fixed #634 by implementing asynchronous texture loading with dedicated thread pool.
- Fixed texture loading blocking render thread causing game freezes.
- Fixed race conditions in texture reload protection using atomic operations.
- Fixed resource leaks in HTTP connections during remote texture downloads.
- Fixed URL validation spam allowing multiple simultaneous downloads of the same texture.
- Fixed exception handling for remote image validation preventing crashes on invalid URLs.
- Fixed
defineId called for:warning messages during NPC loading. - Refactored texture loading architecture with multi-level defense and rate limiting.
- Refactored entity data registration logic for better maintainability.
- Converted data classes to modern Java records for better immutability and thread-safety.
- Added thread-safe session server spam protection with ConcurrentHashMap.
- Added comprehensive error recovery with automatic cooldown reset on failures.
- Improved texture loading with 2-thread pool and 500ms rate limiting.
- Improved exception handling with specific catch blocks for IIOException and FileNotFoundException.
### 6.5.2
- Fixed Villager profession and job skin issue.
- Improved GitHub workflows by adding cache for gradle dependencies.
- Improved Gradle build time and cleanup tasks.
### 6.5.1
- Fixed #632 by implementing ON_KILL action type and event.
- Fixed #629 by improving texture handling performance, caching, and memory usage.
- Fixed kill command is not working on NPCs.
- Fixed texture reload protection preventing cache reload after eviction.
- Fixed WebP validation bug in remote image validator (missing return statement).
- Refactored texture handling logic for better maintainability and future improvements.
- Added time-based reload protection (60 seconds) to replace permanent blocking mechanism.
- Added missing variant textures for chicken, pig and wolf.
- Added additional unit tests for texture handling.
- Improved gradle build tasks.
### 6.5.0
- ⚠️ Removed jar-in-jar bundle approach for better mod compatibility and api capabilities.
- Fixed #627 scissor implementation for better compatibility with other mods.
- Fixed #625 lively animation issues when using rotated or moved model parts.
- Fixed default animation are canceled when using scaled model parts.
- Added better pose animation control with smart, default und none options.
### 6.4.1
- Fixed #626 screen switching logic for different NPC UUIDs, thanks to
Spawnbladefor the detailed
### 6.4.0
- Fixed #626 by improving dialog data validation and error handling.
- Fixed #623 by refactoring render data and render handling.
- Fixed #622 by making sure custom data are properly saved and loaded.
- Fixed open dialog action type to allow opening dialogs from other NPCs.
- Fixed hashing issues by adding missing equals and hashCode methods for ConditionDataSet and
- Added custom data test item for #622 and easier testing of custom data.
- Improved records and fixed potential issues with missing data.
### 6.3.0
- Refactored config ui specific components and removed them from the core mod.
- Fixed dialog data by filtering dialog data before sending to the client.
- Fixed dialog editor layout issues and improved usability.
- Fixed missing default values for some dialog data fields.
- Added dialog priority support to control the order of dialog execution.
- Added condition support for dialog and scoreboard actions.
- Added frequency support for dialog to limit how often an dialog can be shown.
- Added new NPC preset to for scoreboard and condition support.
- Improved dialog button data format by removing redundant fields.
### 6.2.0
- Fixed legacy custom name parsing.
- Fixed string injection within dialogs.
- Fixed missing translation for action types.
- Added scoreboard action type to increase, decrease, set scoreboard values.
- Added
@score(...)NPC macro to display scoreboard values in the dialog. - Added additional unit tests.
- Improved spin button with indicators and better usability.
### 6.1.2
- Fixed container and menu sync issues with missing close container packets.
- Fixed close button not working in some cases.
- Fixed jumping mouse cursor between screen transitions.
- Fixed translation files and removed duplicate and deprecated entries.
- Moved Easy NPC wand to existing core item tab instead of creating a new one.
- Added cat pose support for different model parts (except tail).
- Improved EasyNPCWand glowing effect performance by disabling it when not needed.
- Improved custom entity detection by excluding non-living entities like displays, makers, throwns
- Improved cat variant handling.
### 6.1.1
- Fixed #615 by checking if item is equipped in one of the hands.
- Fixed #612 by re-validating entity types.
- Fixed #610 by force sync of hat and head layers for specific models.
- Fixed orc textures.
- Fixed cat variant handling for 1.21.5.
- Fixed player render by adjusting render state
skinfield. - Fixed cat renderer by adjusting render state
texturefield. - Fixed position, scaling and rotation preview.
- Fixed Fairy model.
- Improved custom model support and performance, by moving related logic into to client side only.
- Improved caching of player to UUID mappings for player skins.
- Limited change model commands and logic to Doppler NPCs only.
- Added renderEntityRaw method to render NPC as-it-is.
### 6.1.0 ✨
This is a major release. Please back up your worlds and NPC data before updating. This version
contains many improvements, optimizations, and internal changes that are **not fully compatible**
with earlier releases.
⚠️ Breaking changes
- Existing NPCs and their configuration data from versions before 6.1.0 may not load correctly or
- Internal data formats and some behaviors have been refactored to support new use-cases.
🧩 New modular structure
Easy NPC is now split into three separate mods:
- Easy NPC** – Bundle that includes both Core and Configuration UI for a plug‑and‑play experience.
- Easy NPC: Core** – Lightweight runtime and logic for NPCs, with minimal dependencies. Intended
- Easy NPC: Configuration UI** – Standalone configuration interface for creating and editing NPCs.
🎯 Why this change?
- Allows servers and modpacks to ship only the **Core** mod on the server side for a leaner setup.
- Reduces memory usage and load times when the UI is not required everywhere.
- Makes development and testing faster by separating UI and core logic.
[history]: https://github.com/MarkusBordihn/BOs-Easy-NPC/commits/
[upgrade_guide]: https://github.com/MarkusBordihn/BOs-Easy-NPC/wiki/Upgrading
## Note
This change log includes the summarized changes. For the full changelog, please go to
the [GitHub History][history] instead.
Note: Please always back up your world / NPCs before updating to a new version!
Check the [upgrade guide][upgrade_guide] for more information.
### 7.15.0
- Fixed #838 by keeping preset imports silent when run through
/executeor command blocks. - Fixed #380 by applying the NPC limit to the default spawner as well.
- Fixed #849 by allowing resource pack sounds in the sound configuration.
- Fixed #349 by no longer spawning NPCs left-handed at random.
- Fixed #851 by locking dialog buttons per dialog, not across dialogs with the same label.
- Fixed deleted or duplicated NPCs returning, memory leaks and several owner and UI issues.
- Fixed the Epic Fight Wither Skeleton NPC missing its Epic Fight mob patch.
- Changed requirements: same mod version on client and server, Easy Model Entities 2.5.0+.
- Changed backups of all worlds and killed NPC data to expire after 30 days, see
storage.cfg. - Added "Jump", "Assist Owner" and "Follow Nearest Player" to fix #845, fix #310, fix #761.
- Added an NPC inventory with item pickup and death drops to fix #111, fix #197, fix #543, fix #670.
- Added "Sit on Shoulder", a boss bar and
/easy_npc debug core loglevelto fix #577, fix #219. - Added the "Hold" animation mode, a "Bank Teller" preset and new API methods for addons.
### 7.14.0
- Fixed #846 by keeping custom poses for players who start seeing the NPC later.
- Fixed attribute and trading settings missing for players who start seeing the NPC later.
- Fixed changed max uses, XP and trading type not shown in the trading screens until reload.
- Fixed
/easy_npc sound setchanges not reaching players until the NPC was reloaded. - Added game tests that check NPC poses and settings after respawns and for new players.
### 7.13.0
- Fixed color and formatting tags in dialog button names showing as plain text.
- Fixed the button preview in the editor showing lowercase names as a raw translation key.
- Fixed the "Move EasyNPC" item not working for NPC owners outside of creative mode.
- Fixed
/easy_npc owner setreporting success even when the owner could not be changed. - Fixed the game crashing when the URL or player skin screen showed a skin download error.
- Fixed the preset browser search showing no results after scrolling down the list.
- Changed the network protocol version, so client and server must run the same mod version.
- Added
@initiator,@npcand@score()support to dialog button names to fix #841. - Added automatic client tests with the Client Runtime Interface Toolkit.
- Larger core refactoring and code cleanup.
### 7.12.2
- Fixed the Fairy hitbox being far too small, so its name tag and speech bubble sat in its body.
- Fixed scaled NPCs keeping their old hitbox and eye level, so hits, clicks and looking missed.
- Fixed oversized names, lists and NPC data in network packets being read without any limit.
- Fixed invalid NPC positions, scales, attributes, names and durations from being applied.
- Changed Fairy NPCs to take up the space of their model, so they collide and can be clicked.
- Changed Skeleton, Stray and Bogged NPCs to the vanilla hitbox height, they were slightly short.
- Changed the network protocol version, so client and server must run the same mod version.
### 7.12.1
- Fixed #836 by always showing "Restore", including datapack presets, with a reason tooltip.
- Fixed preset import and export messages missing, wrong or not warning about replaced NPCs.
- Fixed the preset browser reloading on each keystroke, leaking NPCs and clearing the selection.
- Fixed the preset list sorting, filter order and layout clipping options in small windows.
- Fixed
/easy_npc preset import datawithout a position importing it as a default preset. - Fixed spawn rate limit leaks, unstable preset IDs and "Spawn New" stacking NPCs on one spot.
- Changed "Restore" to refuse instead of spawning a copy when it is not permitted.
- Added sorting, a match count, reload, auto-close, the NPC ID and tooltips for presets and skins.
- Added
matching <pattern>batch imports with limits, a confirmation and a clickable position.
### 7.12.0
- Fixed #833 by showing Easy NPC Wand outlines only to the wand holder, owner and admins.
- Fixed #834 by adding "Set Home Here" and "Reset Home" buttons to the position configuration.
- Fixed #835 by keeping the NPC ID and position in exported presets, so imports restore the same
- Fixed preset imports and spawn eggs losing the owner's list entry and owner objectives.
- Fixed NPCs restored from an automatic backup losing their owner and becoming ownerless.
- Fixed selection lists showing only their first six entries and hiding the rest.
- Changed importing a preset to update the original NPC at its stored position instead of adding a
- Changed completed trades to play the "Trade completed" sound, which stayed silent before.
- Changed the API dialog call to report an unknown dialog label instead of always reporting success.
- Changed NPCs without arms to carry held items at the head or body instead of hiding them.
- Changed the optional Easy Model Entities dependency to require version 2.4.0 or newer.
- Added a "Sound" configuration with sounds for dialogs, speech, swimming, eating and fall damage.
- Added a searchable sound selection with volume and pitch sliders to the "Sound" configuration.
- Added a "Block Vehicles" option to keep NPCs out of boats, minecarts and modded chairs.
- Added the profession selection to all skin configurations and a new built-in skin per NPC type.
- Added client settings to hide name tags behind walls and
highlightEnabledfor wand outlines. - Added an "Exists" condition operation and API access to NPC movement, actions and presets.
### 7.11.0
- Fixed #828 by no longer freezing the server on logout when NPCs follow or watch the player.
- Fixed #831 by moving routine NPC removal messages to the debug log.
- Fixed #832 by making humanoid NPCs ignore custom player models, animations and poses.
- Fixed hourly NPC backups stuttering on large worlds and retaining timestamps of removed NPCs.
- Fixed hourly NPC backups losing the identity, owner and position of the backed-up NPC.
- Fixed owner-login restoration duplicating, repeatedly restoring, reviving or moving unloaded NPCs.
- Fixed NPC index and file synchronization issues causing lost NPCs, crashes or false warnings.
- Fixed stale NPC data after unloading, avoided redundant writes and added repeated-unload warnings.
- Fixed the preset browser failing to list custom and world presets saved in the SNBT format.
- Fixed speech bubbles losing their text and turning translucent with Iris shaders.
- Fixed the "Opacity" of an NPC being ignored while a shader pack is active.
- Fixed text formatting and macro parsing for translated speech bubbles and mod API texts.
- Fixed speech bubbles and their text staying hidden behind blocks while a shader pack is active.
- Added
minLightLevelto keep speech bubbles readable in dark surroundings.
### 7.10.0
- Fixed #829 by allowing bats and other non-walking mobs as the render entity of a Doppler NPC.
- Fixed NPCs rendered as a bat, frog or warden showing a static pose instead of their animation.
- Fixed the NPC name tag showing above the previews in the "Custom Models" configuration.
- Fixed speech bubbles being cut off by walls, doorframes and the NPC's own body.
- Fixed the previews in the "Custom Models" configuration.
- Changed the previews in the "Custom Models" configuration to stand on a common ground line.
- Changed overlapping speech bubbles to move apart and to stay visible when the NPC is off-screen.
- Changed "Navigation: Automatic" to use flying movement for NPCs rendered as a flying mob.
- Changed the render entity list to hide seats, paintings, thrown items and other non-mob entities.
- Added a "Min. hover height" slider for flying NPCs and client settings for speech bubbles.
### 7.9.0
- Fixed modded fish NPCs, like the ones of Tide 2, spinning around instead of swimming upright.
- Fixed "Navigation: Automatic" using ground movement for water NPCs and aquatic model NPCs.
- Fixed the "Random Swimming" objective never moving an NPC that uses aquatic navigation.
- Fixed a swimming NPC shaking or twitching in place instead of holding its tilt and swim depth.
- Fixed a swimming NPC turning in circles forever when it could not reach its next path point.
- Fixed an NPC that fell into water never getting out of it again.
- Fixed a following NPC searching a new path every tick while its target was unreachable.
- Fixed the "Move to" actions stopping short of a raised target or not starting while in the air.
- Fixed "Move back to Home" ignoring height differences and never returning from beyond 32 blocks.
- Fixed the "Opacity" input field being too narrow to show a value of 100.
- Fixed a damaged NPC with an Easy Model Entities model never flashing red.
- Changed modded water NPCs to swim level, vanilla water mobs keep their tilt as before.
- Changed the "Move to" actions to walk up to 48 blocks and to teleport only beyond that range.
- Changed "Move to" and "Move back to Home" to give up after three seconds without progress.
- Changed the timeout of a "Move to" action to count real ticks, it ran twice as long before.
- Changed a new "Random Swimming" objective to rank below following, fleeing and attack goals.
- Changed "Opacity" of an NPC with an Easy Model Entities model to be applied by that mod itself.
- Changed the minimum Easy Model Entities version to 2.3.0, older versions disable the integration.
- Added "Depth below surface" and "Height above floor" sliders for the swim level of an NPC.
- Added log entries for the NPC files written on a world save, with a warning above 250 ms each.
### 7.8.1
- Fixed #827 by rendering fish NPCs in water upright instead of always flopping on their side.
- Fixed #828 by keeping a damaged NPC from blocking the world save, it now falls back to defaults.
- Fixed a restored NPC picking up a random preset ID that changed with every save.
- Changed NPC data to only be written to disk when it actually changed.
### 7.8.0
- Fixed smaller text and UI issues.
- Changed an NPC that is already standing at its target position to finish the movement right away.
- Changed the "None" skin tab to "Advanced", which now holds "Disable Skin" and the texture field.
- Added a "Move to" action, which sends an NPC to a position, a player, its owner or its home.
- Added a "Move to and Wait" action, which runs the following actions only after the arrival.
- Added an arrival radius, a timeout and an optional teleport to both move actions.
- Added an "Opacity" attribute from 0 to 100, which fades body, armor and hand items together.
- Added a "Set Opacity" action, which turns an NPC into a ghost or hides it completely.
- Added the "Lantern Wraith" preset, a ghost walking a square with a short line at every corner.
- Added API access to the move actions and the opacity of an NPC.
- Added a "Resource Location" skin type, which renders any texture of a mod or a resource pack.
- Added an "Advanced" skin tab, which previews the NPC with the entered texture before applying it.
### 7.7.7
- Fixed #821 by keeping the transparency of 64x64 skins, which Fresh Moves needs for its eyes. Skins
- Fixed #818 by running trade actions for Villager and Wandering Trader NPCs as well.
- Fixed a dialog with several text variants switching its speech bubble size every second.
- Fixed the skin cache storing the processed image instead of the original download.
- Fixed the untranslated interval names, like
PER_DAY, of the "Execution Limit" condition. - Fixed the
sitanimation of Easy Model NPCs, which never used the built-in sitting pose. - Fixed the speech bubble being cut off by the head of an NPC when a player stood close to it.
- Changed speech bubbles to keep their screen size and to move down or aside when a player is close.
- Changed the speech bubble text to render 20% larger than a name tag.
- Changed a time based action set with a "Wait" action to run in order instead of picking one entry.
- Changed dialog texts to wrap later, so an existing dialog can switch to the wider screen layout.
- Changed fallback actions to skip screen actions without a player, like the regular actions do.
- Changed the minimum Easy Model Entities version to 2.1.0, older versions disable the integration.
- Added a "Wait" action, which pauses the following actions of an event for a chosen duration.
- Added the "Countdown Timekeeper" preset, a speech bubble count to ten ending in sound and sparks.
- Added scaling and rotation for Doppler NPCs behind the "Experimental Features" checkbox. Both only
- Added a "Sound" action, which plays a sound at the NPC with sound category, volume and pitch.
- Added "Every 5 Minutes" and "Every 15 Minutes" to the "Execution Limit" condition.
- Added a "Player Idle" condition, which checks how long a player has not moved.
- Added an "Immovable" attribute, which keeps an NPC in place against pushing and knockback.
- Added
/easy_npc pauseto pause a single NPC or all NPCs; the global pause ends with the server. - Added API access to the sound action, the pause state and the idle time of a player.
- Added a texture override per model slot for Easy Model NPCs over
/easy_npc render texture. - Added a "Repeat" playback mode with a count and a time limit to the "Play Animation" action.
- Added API access to animation variants, texture slots and textures of Easy Model NPCs.
### 7.6.0
- Fixed unclear mod conflict errors for duplicate entity data tracker IDs.
- Fixed third-party health bars rendering over NPC previews in configuration and dialog screens.
- Fixed Doppler and Easy Model Entities NPCs using default hitboxes instead of their model size.
- Fixed the
/easy_npccommands suggesting no NPC UUIDs at all on a server. - Fixed the pose list of the "Set Pose" action drawing over its input field.
- Fixed the untranslated "Loop", "After current" and "Action Data Type" labels of the action editor.
- Fixed the missing hint text of the "Chance" condition.
- Fixed long condition hints running out of the editor screen instead of wrapping.
- Fixed the misaligned help icons and text buttons of the "Message" action.
- Fixed changes to the "Set Pose", "Play Animation" and "Stop Animation" actions not being saveable.
- Fixed the speech bubble text sitting closer to its upper border than to its lower one.
- Changed the NPC suggestions to list the crosshair NPC first and only own NPCs without permissions.
- Changed a preset export to only store what differs from a new NPC, without position or owner.
- Changed a preset without objectives or actions to fall back to the defaults of its NPC type.
- Changed events without a player, like "On Spawn" or "On Kill", to check their conditions. An
- Changed a time based action to pick the owner as
@initiatorwhenever the owner is nearby. - Changed speech bubbles to stay visible from 5 up to 18 seconds, depending on the text length.
- Changed the "Set Pose" action to only show its input field for the "custom" pose entry.
- Added time based actions on five fixed steps, from every ~1 second up to every ~15 minutes.
- Added a "Message" action for chat, system message and speech bubble text without a command.
- Added text variants, a sender name, a recipient and translation keys to the "Message" action.
- Added the speech bubble graphic as
easy_npc:textures/gui/speech_bubble.pngfor resource packs. - Added a "Chance" condition in percent and a "Relationship" condition for owner and faction.
- Added spawn, owner login, state change, day / night, weather and the missing "On Trade" events.
- Added a base preset per NPC type under
easy_npc:api/preset/base/, usable as a parent preset. - Added the "Wandering Companion" preset, a talkative NPC built from time based messages.
- Added an action registry, an action handler, a preset validator and richer event data for mods.
- Added a tooltip with name, type and distance to every NPC suggestion of the
/easy_npccommands. - Improved the NPC suggestions, which appear without typing and tolerate a near miss of one block.
### 7.5.0
- Fixed the home position of an NPC always reading as unset, which hid "Home" in the configuration
- Fixed NPCs spawned from a preset, the preset browser or a respawn never getting a home position.
- Fixed an NPC spawned from the preset browser keeping the home position of the world the preset was
- Fixed NPCs being drawn as a white silhouette with a shadow in the configuration, skin and preset
- Fixed #814 by giving every Cobblemon NPC its own animation state instead of one per species.
- Fixed #813 by letting "Move back to Home" work at any distance instead of only near its home.
- Fixed #812 by checking once per session whether a player changed their skin.
- Fixed #810 by accepting Cobblemon aspects of resource packs instead of only "shiny" and "female".
- Fixed the server crashing when an NPC with a "Tempt" objective ticked its goals.
- Fixed flying NPCs like Allay, Vex and Ghast moving on the ground instead of flying.
- Fixed dialog, button, preset, pose and texture names with duplicates or special characters.
- Fixed conditions not being editable on a dedicated server and untranslated condition texts.
- Fixed Easy Model Entities NPCs not turning their head and their model list ignoring a
/reload. - Fixed the "Legacy Easy NPC Data" warning appearing for newly created NPCs.
- Fixed missing transparency corrections for old 64x32 skins, which showed layer artifacts.
- Fixed the player skin screen freezing for a moment while a player name was looked up.
- Fixed the "Reset look at ..." objective label, which read "Reset loot at ..." in some languages.
- Fixed the Fabric game tests, which crashed on start because of the development helper mods.
- Fixed NPCs losing their owner when they were spawned again after a despawn.
- Fixed objectives being deleted from an NPC when the mod providing them was missing at start.
- Fixed objectives being switched off for good when their target entity was missing.
- Fixed importing a preset without a stored id, which spawned an NPC without owner and home.
- Fixed "Follow owner" and "Look at owner" keeping their old target after the owner was changed.
- Fixed attack targets staying assigned to an NPC after the targeted entity was gone.
- Fixed the "Look at Item" objective, which could be stored but never did anything.
- Fixed walking animation for Doppler NPC and 3rd party models.
- Fixed Forge never running its server start-up step, which left NPC tracking, factions and the
- Fixed Forge development runs starting without any mixins, which disabled the vanilla entity
- Changed the movement objectives to a fixed order: flee, follow, return home, then stroll. NPCs
- Changed datapack presets to
easy_npc/preset/, the old folder still works, but only for easy_npc. - Changed the preset browser to always list its entries in the same order.
- Changed the required Easy Model Entities version to 1.7.0, floating models now hover by default.
- Removed the experimental user-defined NPCs; the extra config file is no longer read or created.
- Removed the unused
SERVER_SKINskin type. - Added new gametest strcuture to support gametest in 1.21.11 and higher.
- Added a reload button to each entry of the player skin screen, to fetch a single skin again.
- Added the reason to the log whenever an NPC is removed, so an unexpected despawn can be traced.
- Added suggestions to
/easy_npc render set species. - Added support for presets from other mods, which no longer have to use the
easy_npcnamespace. - Added a preset visibility that hides a preset from the preset browser and the NPC screens.
- Added a teleport distance and a resting spot offset to the follow objectives.
- Added item tags, a "can be scared" option and a "only without owner" option to "Follow item".
- Added an item field to the look objectives, so an NPC can watch a chosen dropped item.
- Added an identifier per NPC, so a mod can find its own NPCs again.
- Added an option to spawn an NPC again when its owner logs in.
- Added NPC states with number, yes/no and text values, usable as condition, action and command.
- Added a "Navigation" and a "Hover height" setting to switch any NPC between ground and flying.
- Added a parent preset reference, so a preset can build on another one and only override changes.
- Added the state driven "Forge Keeper" preset.
- Added custom conditions and dialog, action and state events for other mods.
- Added "On Far Distance" as a distance action, which triggers at 32 blocks.
- Added game tests for NeoForge, which had none, and restored the spawn egg, dialog screen, data
- Added game tests for every configuration and editor screen, covering all three mod loaders.
- Added game tests for the home position, covering the spawn default, the stored value and
- Improved the model name parsing, which mistook a species ending in "_shiny" for a variant.
- Improved following of flying NPCs, which now steer directly when there is no path through the air.
- Improved floating Easy Model Entities models, which now bob up and down.
- Improved third party support with an API for presets, own objectives and objective configuration.
### 7.4.0
- Fixed #807 by no longer pulling every same-type NPC within 32 blocks into a "Defend Self" fight.
- Fixed #805 by evaluating all visibility settings together instead of stopping at the first one.
- Fixed #804 by keeping the custom name on Doppler NPCs for name based textures and the name tag.
- Fixed #803 by adjusting assets to match typical Minecraft style instead of generic UI style.
- Fixed the day and night detection, which counted sunrise as night and sunset as day.
- Fixed the visibility in the Nether and the End, which used the Overworld time.
- Fixed the time and game mode visibility checkboxes appearing in a random order.
- Fixed game tests only being able to fail on their first assertion, which hid later failures.
- Fixed the "Saddled" horse skin variants, which never showed a saddle.
- Changed "Visible to Owner" and "Visible to Team" to also follow day, night and game mode.
- Changed Evoker, Illusioner and Vindicator variants without "Crossed Arms" to keep their arms down.
- Added a "Defend Faction" objective that attacks whoever hurt a nearby faction member or player.
- Added a system message when faction members fight each other and the faction stays out of it.
- Added a head equipment slot for Illagers so their captain banner can be removed or swapped.
- Added a day and night preview to the display configuration screen.
- Added unit and game tests for the visibility attributes and the faction defense.
- Improved the visibility check performance by reading the display attributes only once per check.
- Improved display attributes from older versions by completing them with their defaults.
- Improved the attack objective screen by disabling "Protect Owner" and "Defend Faction" when unset.
### 7.3.0
- Improved skin variants by carrying their data as typed fields instead of parsing variant names.
- Centralized the Cobblemon mod id and default model on shared constants.
- Reduced duplicated enum code with a shared
EnumUtilshelper forget(String)lookups. - Optimized villager profession and type lookups to use direct registry keys instead of scans.
- Optimized enum name lookups by caching tag names, ids and keys once at construction.
- Added unit and game tests for skin variants, villager resolution and the enum helper.
### 7.2.0
- Fixed #801 by using combination for NPC, Dialog and Action UUIDs to avoid collisions for action
### 7.1.1
- Fixed #800 by lazy loading entity types.
- Fixed #799 by fixing edge cases and adding additional documentation and better log messages.
- Fixed #798 by considering console, commands and command blocks as trusted command sources.
- Fixed a critical single-player / LAN issue where client and server NPCs shared the same registry.
- Fixed a memory leak in the configuration menu handling and added timeout and disconnect cleanup.
- Fixed duplicate downloads when several NPCs request the same skin at the same time.
- Fixed skin lookups failing after a error so a slow server no longer freezes the game.
- Fixed the URL skin screen freezing the game while checking a remote image; the check now runs in
- Added a new World Spawner block that limits an NPC preset across the whole world (all dimensions),
- Hardened remote skin downloads with a strict size limit and safe redirect handling to prevent
blockPrivateAddresses setting.- Improved server performance by only sending entity and player load events to NPCs that actually
### 7.0.0
- Fixed #794 by using the expected type for NPC rendering.
- Fixed #791 by adding Wandering Trader NPC type.
- Fixed #788 by extending the AI safeguards to Epic Fight and raw NPC variants (Piglin, Villager,
- Fixed #787, #531, #237 and #184 by adding a faction system with
/easy_npc factioncommands,
- Fixed #787, #771 and #572 by adding a new
targetobjectives tab to attack hostile factions or
- Fixed #786 by adding gender and shiny model variants for Cobblemon NPCs, searchable via
female
shiny in the model selection.- Fixed faction combat between invulnerable NPCs by adding the new
Attackable by Factionscombat
- Fixed Cobblemon model selection previews for oversized species by scaling with Cobblemon's own
- Fixed faction management edge cases by validating faction names, sorting faction lists and
- Fixed custom skin reloads by loading and clearing texture caches per skin model instead of always
- Improved the
Attackable by Players/Monsters/Factionscombat attributes to work independently of
Invulnerable, each opening a targeted hole for its own attacker group.- Improved preset command and network handling by splitting the large handlers into smaller focused
- Added Easy Model Entities Support.
- Added faction manager and faction editor screens to create, color and delete factions and manage
FACTION_MANAGEMENT security feature.- Added new
Miscattributes tab as home for the NPC faction assignment. - Added reusable warning and help icon components for inline hints with tooltips.
- Added additional unit and game tests for factions, target objectives and Cobblemon model variants.
### 6.25.0
- Fixed #782, #636, #622 by preserving data components during validations.
- Fixed #780 by caching remote texture downloads and reducing duplicate registrations.
- Fixed #767 by clamping attribute sliders against extreme values from other mods.
- Fixed #754 by adding custom data item matching for NPCs with actions and conditions.
- Fixed texture manager running in the wrong thread may cause crashes and deadlocks in >= 1.21.x.
- Fixed empty UUID handling for action conditions.
- Fixed execution limit reset for actions.
- Added texture registration queue to avoid multiple simultaneous downloads in the same tick.
- Added NPC coin, key and red token as consumable items for NPCs with actions and conditions.
- Added
Welcome Coin Traderas example NPC preset with custom coin, key and red token item data. - Added attribute safeguards against extreme values from other mods.
- Increased fallback max health value from 1024 to 4096 for high-health NPCs.
- Improved texture manager by reducing duplicate texture checks and registrations.
### 6.24.0
- Fixed #459, #775 by adding an option to block interactions with invisible NPCs.
- Fixed #774 startup crash related to optional Epic Fight and Cobblemon entity type maps.
- Fixed #773 by checking timed trade resets during base ticks and before opening trade screens.
- Fixed trade reset timing by increasing internal tickers correctly.
- Added time of day and weather conditions for #459.
- Added additional unit and game tests for trade resets, ticker handling and entity attributes.
- Added
Skywatch Scoutas example NPC preset with time of day and weather conditions.
### 6.23.0
- Fixed #772 by adjusting texture retries with 403 and 404 errors and lowering logging.
- Fixed #770 item rendering for Epic Fight NPCs (Evoker, Pillager, Vindicator and humanoid skins).
- Fixed #769 door loops with NPCs not reliably opening or closing doors.
- Fixed #760 by adding a dialog option and config setting (buttonConditionMode: LOCK or HIDE) to
- Fixed #709 by adding color picker popup for names with 32 colors and/or a manual RGB/hex value.
- Fixed NPC name color being reset when renaming without a specified color by preserving the
- Improved the door movement attributes so "Pass Door" is automatically enabled while "Open Door"
### 6.22.0
- Fixed #766 by passing the full server player context to command execution for better compatibility
- Fixed #764 by adding entity health, npc health conditions and NPC preset
Grukk, the Sparring Post as example for using these conditions.- Fixed #763 by making sure dialog button execution limits are now recorded.
- Fixed #758 by providing a example NPC preset named
One Wish Companion. - Fixed crashes related to 3rd party villager AI reading non-registered brain memories on Easy NPC
- Fixed Dialog buttons are not locked for server-side data as preparation for #760 and #644.
- Fixed #628 by adding conditional dialog opening support / command for better control over when
- Added brain AI for Piglin and Piglin Brute NPCs and registered the full vanilla brain memory set.
- Added additional guns to the gun tag for #757.
- Added a new "Open Dialog (Conditional)" action that opens a named dialog only if its conditions
- Added new entity health and npc health conditions for actions, dialogs and dialogs buttons.
- Added Piglin, Piglin Brute and Zombified Piglin NPCs invulnerable, for consistency with other
- Added a new "Knockback Immunity" combat attribute that prevents the NPC from being knocked back by
- Added a new "Explosion Immunity" combat attribute that makes the NPC immune to explosion damage
- Moved the "Projectile Collision" attribute to the Combat attribute screen, where it fits better
### 6.21.0
- Fixed item attachment for Illagers in crossed-arms pose.
- Fixed broken illager crossbow attack goal.
- Fixed crashes related to 3rd party items which are not renderable as hand items #756.
- Fixed crashes related to 3rd party mixins trying to access non-existing model parts #756.
- Fixed log.info spam message by reducing log verbosity and adding additional checks for custom
- Improved EasyNPCModelManager performance.
- Refactored NPC renderers to remove default hand item layer.
### 6.20.0
- Fixed crashes related to 3rd mods trying to access non-existing NPCs goals.
### 6.19.0
Note: This update adjusted the dialog background images by 10x6 pixels, which may require users to
adjust their custom dialog backgrounds if they are using custom ones.
- Fixed #752, #130 by adding dialog button condition support to allow to disable buttons.
- Fixed #683, #215 by adding typewriter effect support for dialog text.
- Fixed #690, #309 by allowing conditions for dialog, dialog buttons and interactions.
- Fixed smaller UI issues with dialog screen layout and background.
- Refactored dialog background images by 10x6 pixels on each side.
- Refactored dialog screen layout to better fit the new background size and improve appearance.
- Added typewriter effect and client configuration for dialog text.
- Added condition symbols to indicate the condition status for dialog, buttons and interactions.
- Added amount field for item conditions to allow checking for specific amounts of items.
- Added
Threshold Wardenas example NPC preset with various conditions and actions. - Added smaller bug fixes and optimizations related to dialog conditions and button states.
### 6.18.0
Note: This update changes the internal data format for conditions and actions, which may reset /
remove legacy existing execution-limit entries without stored IDs.
- Fixed #745 by adding conditions for actions to allow more complex and dynamic behavior.
- Fixed #652 by adding dialog button tooltip for longer texts.
- Fixed #687 by adding command value tooltip to show the full value.
- Added Experience Level conditions.
- Added Game-mode conditions.
- Added has item in inventory condition.
- Added has item in hand condition with (main hand and off-hand) support.
- Added player health condition.
- Added player tag condition.
- Added player team condition.
- Added Goldmere example NPC preset with various conditions and actions.
- Added negative condition support to allow negating conditions for more complex logic.
- Removed parameter pseudo IDs for
ActionDataEntryand replaced them with random UUIDs. - Refactored condition system to allow more condition types.
### 6.17.0
- Fixed #738 by adding additional tooltips for "Execute as player"
- Fixed to detailed logs by reducing log.info messages during startup and in-game.
- Added additional unit and game-tests.
### 6.16.0
- Fixed #732 by providing option to disable ESC key and close button for dialogs.
- Fixed #723 by avoid auto-close in specific cases like trading screens.
- Added general dialog configuration options to allow users to customize dialog behavior.
- Added avatar scaling and position offset options for dialogs.
- Added missing translation keys.
### 6.15.0 (Trades, Player Heads, Epic Fight and QOL updates)
- Fixed #731 by resyncing species data, if species list is empty on the client.
- Fixed #730 by improving Epic Fight integration and enabled experimental features.
- Fixed #729 by making sure trade uses are stored correctly.
- Fixed #728 by adding custom head support for player heads.
- Fixed #689 by showing remaining trade uses and allow resetting manually and automatically.
- Fixed #218 and #132 with new trade configuration screen and better support for custom trades.
- Fixed trade specific edge by switching between basic and normal/advanced trading mode.
- Fixed dialog button text is truncated with tooltip showing the full text.
- Fixed Cobblemon animation issues by syncing animation state with Cobblemon Animation System.
- Added per trade specific actions to allow users triggering actions after buys.
- Added trade reset button to reset all trades easily.
- Added trade usage information to trade configuration screen.
- Added experimental feature state to allow users to manually enable experimental features.
- Added Griselda Grindstone as example trader with actions.
- Cleanup test files.
### 6.14.0
- Fixed #727 by making sure changes are synced to the client when changing values.
- Fixed #726 by adding additional allow lists for specific commands.
- Fixed #686, #389, #304, #211 by adding basic Cobblemon support with Cobblemon NPC.
- Fixed dialog misalignment and navigation issues by adjusting dialog sprites and screens.
- Fixed x and z root rotation by correcting rotation logic and pivot calculations.
- Added basic Cobblemon support with custom NPC type and model for testing.
### 6.13.0 (Security and Permissions Updates)
Notes: This update includes better security checks and permissions for multiplayer environments. It
allows to execute server commands which can be potentially dangerous if used with malicious intent.
- The update splits the model root data and logic from the rest of the model part data and logic,
- Fixed #725 by separating model root data and logic from the rest of the model part data and logic.
- Fixed #722 by supporting .sbnt files as local presets.
- Fixed #675 by adding dedicated assets for dialog and config screen backgrounds.
- Fixed #605, #532, #529 with new security checks and permissions system.
- Fixed #469, #311 by adding experimental api documentation and examples for custom model support.
- Fixed double rendering of config screen background by removing redundant background rendering.
- Fixed Ghast and Slime hitbox and name tag position issues by adjusting bounding box.
- ⚠️ Added security checks to prevent potential exploits and allow safe usage in multiplayer
- Replaced dynamic dialog screen background with a static one for better performance, customization
- Replaced dynamic config screen background with a static one for better performance.
- Refactored config-ui specific components and removed them from the core mod.
- Removed duplicated sprite sheets.
- Prepare permission system for possible Luck Perms integration in the future like #712.
- General code cleanup and optimizations related to config screen rendering and assets.
### 6.12.0
- Fixed #714 by adding additional checks for custom model part list based on vanilla models.
- Fixed #713 by reducing log verbosity with downgraded per-NPC INFO messages to DEBUG and
- Fixed #711 by reduced oversized startup/config log output.
- Fixed NBT validation guard to prevent unnecessary buffer allocations in production.
- Added model part name constants to EasyNPCModelManager for consistent usage across mixins.
- Improved RenderEntityTypeSupportConfig by enhancing filter logic and optimizing data structures
- Removed verbose debug logs that dump large data structures.
### 6.11.1
- Fixed #710 by improving backward-compatible parsing for recoverable trade data.
### 6.11.0
- Fixed #703 rendering issue with new custom layer system and hand renderings.
- Fixed #701 by adding additional safeguards and logging for invalid trading offers.
- Fixed smart animation not working properly with modified head position.
- Fixed head tracking by moving player detection back to server side-only.
- Fixed CustomLookAtPlayerGoal to better handle edge cases and reduce jitter.
- Fixed issue with Doppler NPCs keeping their hand inventory.
- Improved PoseManager logging message.
- Updated logo with a new design.
### 6.10.0
- Fixed #698 by adding try and catch for 3rd party entity creation.
- Fixed #695 by clearing model part rotations/positions when switching to a
DEFAULTvanilla pose. - Fixed #695 by applying lock rotation and pose animation only when the NPC is idle.
- Fixed #695 by correcting root rotation pivot to use actual bounding box height instead of 0.5f.
- Fixed multiple objective registration issues including inverted
isTargetedPlayercheck, wrong
targets.
- Fixed goal reference being retained after objective is unregistered.
- Removed auto-lock of ROOT rotation when loading poses; root lock is now user-controlled.
- Added lock rotation checkbox to the advanced and custom pose configuration screens.
- Added model-specific pose key filtering in
ConfigurationMenuHandlerfor the default pose screen. - Added unit tests for
CustomPosition,CustomRotation,CustomScale,ModelPose,
ModelAnimationBehavior and ModelAnimationData.- Added
NPCDataIsolationTestHelperand game tests for Fabric and Forge. - Increased max head yaw range from 60° to 65°.
### 6.9.0
- Fixed #692, #666 by adding caching and safeguards to prevent redundant retriggering of NPC entity
- Fixed #651, #617 by adding basic custom poses for all supported NPC types.
- Fixed #597 by adding additional Flee goals for fleeing from players, villagers, monsters, ...
- Fixed pose loading to read directly from mod resources instead of copying files to disk.
- Fixed duplicate
saveNPCcalls on entity join by checking existing registry entry first. - Added
despawnandspawncommands to remove and re-spawn NPCs by UUID with configurable removal
- Added
ModelPoseAPIandEasyNPCEntityHandlerpublic API classes for controlling NPC poses and
- Added pose data files for all supported NPC types.
- Added lock rotation checkbox to the basic pose configuration screen.
- Added
MoveToPositionGoalto move an NPC to a position before executing a callback action. - Added
EasyNPCLookControlandEasyNPCBodyRotationControlto respect locked root rotation. - Added synced owner change and dimension change to the NPC entity data index.
- Added EasyNPCItemAttachmentLayer into various entity renderers.
- Added dedicated
Flee Objectiveconfiguration tab with objectives for fleeing creepers, monsters,
- Added
FOLLOW_ITEMobjective to the follow objectives tab to make NPCs follow item entities by
minecraft:apple).- Added
LookAtEntityByUUIDGoaland enabled the look-at-entity-by-UUID and look-at-owner objectives
- Added
persistentflag toSynchedDataIndexso that transient indices (e.g. crossbow charge,
- Added configurable
customParticlesEnabledflag toSlimeBasefor API consumers. - Added
SoundType.PETand mappedCAT_PURRto the cat NPC for tamed ambient sound variety. - Reduced log verbosity for periodic NPC save operations from INFO to DEBUG.
### 6.8.3
- Fixed #680 by enforcing version miss-match by upgrading network protocol version.
- Fixed #679 by resetting position, rotation and size for name tag.
- Fixed #665 by adding multi state slide for root rotations.
- Fixed #664 by adding option to disable following mouse cursor for easier posing.
- Fixed #663 by improve support for X and Z root rotations.
- Fixed #661 by adding quick rotation with NPC wand and sneaking to the NPC to rotate the root to
- Fixed move tool is wrongly triggering interactions by adding check for move tool in interaction
- Fixed Preset Item is wrongly triggering interactions by adding check for preset item in
- Fixed Slime and Ghast hitbox and name tag position issues by adjusting bounding box and eye height
- Fixed Slime and Ghast GUI position by adjusting offset values.
### 6.8.2
- Fixed #677 by extending
SafeMerchantDatawith notifyTrade to avoid crashes. - Added progression data support for leveling up NPCs based on player interactions and actions.
- Added global NPC tracking system for better management and debugging of NPCs across the world.
- Added
OriginalModelConfig.withVariantTexture()option to allow using variant textures with the
### 6.8.1
- Fixed #676 by using existing preset helper method instead of custom one.
### 6.8.0 (Adding API support)
- Fixed #667 by adding warning messages and additional checks for invalid network packets.
- Fixed Horse spawn eggs model.
- Fixed pose support for allay, chicken, creeper, fox, ghast, horse, illager, iron golem, slime and
- Added NPC base classes for better API support.
- Added NPC raw classes for advanced API support.
- Added Slim and Ghast NPC types.
- Added Custom Model API for easier integration with other mods and custom models.
- Refactored internal data handling and registration for better maintainability and future
### 6.7.1
- Fixed #657 and #656 by adding additional client side checks for vanilla bug.
### 6.7.0
- Fixed #650 by implementing Wolf Leg Animations in setupAnim method.
- Fixed #648 by fixing canBeHitByProjectiles translation.
- Fixed #645 by adding
allowBypassInvulnerabilityconfig option to allow/deny bypassing
- Fixed delete button showing label even with small width.
- Fixed up and down buttons not positioned correctly in some cases.
- Fixed name tag showing up for dialog and configuration UI.
- Fixed distance action issue were multiple actions are not properly triggered.
- Fixed issues with NPC presets.
- Fixed Cat NPC and Wolf NPC owner data not syncing properly.
- Added preset browser for easier selection of common NPC presets.
- Added preset .snbt (text) export and import functionality for sharing NPC presets.
- Refactored existing NPC presets to use new .snbt format.
- Refactored spawner system to use new preset format for better maintainability and future
### 6.6.2
- Fixed #643 by rework scaling system.
- Fixed scaling not properly updating hitbox and nametag position after restart / reload.
- Added MID and MOUSE_OVER name tag visibility modes for finer control over NPC name display.
- Added team-based name tag visibility support respecting vanilla Team.
### 6.6.1
- Fixed #638 by refactored internal data handling for display attributes.
### 6.6.0
- Fixed #634 by implementing asynchronous texture loading with dedicated thread pool.
- Fixed texture loading blocking render thread causing game freezes.
- Fixed race conditions in texture reload protection using atomic operations.
- Fixed resource leaks in HTTP connections during remote texture downloads.
- Fixed URL validation spam allowing multiple simultaneous downloads of the same texture.
- Fixed exception handling for remote image validation preventing crashes on invalid URLs.
- Fixed
defineId called for:warning messages during NPC loading. - Refactored texture loading architecture with multi-level defense and rate limiting.
- Refactored entity data registration logic for better maintainability.
- Converted data classes to modern Java records for better immutability and thread-safety.
- Added thread-safe session server spam protection with ConcurrentHashMap.
- Added comprehensive error recovery with automatic cooldown reset on failures.
- Improved texture loading with 2-thread pool and 500ms rate limiting.
- Improved exception handling with specific catch blocks for IIOException and FileNotFoundException.
### 6.5.2
- Fixed Villager profession and job skin issue.
- Improved GitHub workflows by adding cache for gradle dependencies.
- Improved Gradle build time and cleanup tasks.
### 6.5.1
- Fixed #632 by implementing ON_KILL action type and event.
- Fixed #629 by improving texture handling performance, caching, and memory usage.
- Fixed kill command is not working on NPCs.
- Fixed texture reload protection preventing cache reload after eviction.
- Fixed WebP validation bug in remote image validator (missing return statement).
- Refactored texture handling logic for better maintainability and future improvements.
- Added time-based reload protection (60 seconds) to replace permanent blocking mechanism.
- Added missing variant textures for chicken, pig and wolf.
- Added additional unit tests for texture handling.
- Improved gradle build tasks.
### 6.5.0
- ⚠️ Removed jar-in-jar bundle approach for better mod compatibility and api capabilities.
- Fixed #627 scissor implementation for better compatibility with other mods.
- Fixed #625 lively animation issues when using rotated or moved model parts.
- Fixed default animation are canceled when using scaled model parts.
- Added better pose animation control with smart, default und none options.
### 6.4.1
- Fixed #626 screen switching logic for different NPC UUIDs, thanks to
Spawnbladefor the detailed
### 6.4.0
- Fixed #626 by improving dialog data validation and error handling.
- Fixed #623 by refactoring render data and render handling.
- Fixed #622 by making sure custom data are properly saved and loaded.
- Fixed open dialog action type to allow opening dialogs from other NPCs.
- Fixed hashing issues by adding missing equals and hashCode methods for ConditionDataSet and
- Added custom data test item for #622 and easier testing of custom data.
- Improved records and fixed potential issues with missing data.
### 6.3.0
- Refactored config ui specific components and removed them from the core mod.
- Fixed dialog data by filtering dialog data before sending to the client.
- Fixed dialog editor layout issues and improved usability.
- Fixed missing default values for some dialog data fields.
- Added dialog priority support to control the order of dialog execution.
- Added condition support for dialog and scoreboard actions.
- Added frequency support for dialog to limit how often an dialog can be shown.
- Added new NPC preset to for scoreboard and condition support.
- Improved dialog button data format by removing redundant fields.
### 6.2.0
- Fixed legacy custom name parsing.
- Fixed string injection within dialogs.
- Fixed missing translation for action types.
- Added scoreboard action type to increase, decrease, set scoreboard values.
- Added
@score(...)NPC macro to display scoreboard values in the dialog. - Added additional unit tests.
- Improved spin button with indicators and better usability.
### 6.1.2
- Fixed container and menu sync issues with missing close container packets.
- Fixed close button not working in some cases.
- Fixed jumping mouse cursor between screen transitions.
- Fixed translation files and removed duplicate and deprecated entries.
- Moved Easy NPC wand to existing core item tab instead of creating a new one.
- Added cat pose support for different model parts (except tail).
- Improved EasyNPCWand glowing effect performance by disabling it when not needed.
- Improved custom entity detection by excluding non-living entities like displays, makers, throwns
- Improved cat variant handling.
### 6.1.1
- Fixed #615 by checking if item is equipped in one of the hands.
- Fixed #612 by re-validating entity types.
- Fixed #610 by force sync of hat and head layers for specific models.
- Fixed orc textures.
- Fixed cat variant handling for 1.21.5.
- Fixed player render by adjusting render state
skinfield. - Fixed cat renderer by adjusting render state
texturefield. - Fixed position, scaling and rotation preview.
- Fixed Fairy model.
- Improved custom model support and performance, by moving related logic into to client side only.
- Improved caching of player to UUID mappings for player skins.
- Limited change model commands and logic to Doppler NPCs only.
- Added renderEntityRaw method to render NPC as-it-is.
### 6.1.0 ✨
This is a major release. Please back up your worlds and NPC data before updating. This version
contains many improvements, optimizations, and internal changes that are **not fully compatible**
with earlier releases.
⚠️ Breaking changes
- Existing NPCs and their configuration data from versions before 6.1.0 may not load correctly or
- Internal data formats and some behaviors have been refactored to support new use-cases.
🧩 New modular structure
Easy NPC is now split into three separate mods:
- Easy NPC** – Bundle that includes both Core and Configuration UI for a plug‑and‑play experience.
- Easy NPC: Core** – Lightweight runtime and logic for NPCs, with minimal dependencies. Intended
- Easy NPC: Configuration UI** – Standalone configuration interface for creating and editing NPCs.
🎯 Why this change?
- Allows servers and modpacks to ship only the **Core** mod on the server side for a leaner setup.
- Reduces memory usage and load times when the UI is not required everywhere.
- Makes development and testing faster by separating UI and core logic.
[history]: https://github.com/MarkusBordihn/BOs-Easy-NPC/commits/
[upgrade_guide]: https://github.com/MarkusBordihn/BOs-Easy-NPC/wiki/Upgrading
## Note
This change log includes the summarized changes. For the full changelog, please go to
the [GitHub History][history] instead.
Note: Please always back up your world / NPCs before updating to a new version!
Check the [upgrade guide][upgrade_guide] for more information.
### 7.15.0
- Fixed #838 by keeping preset imports silent when run through
/executeor command blocks. - Fixed #380 by applying the NPC limit to the default spawner as well.
- Fixed #849 by allowing resource pack sounds in the sound configuration.
- Fixed #349 by no longer spawning NPCs left-handed at random.
- Fixed #851 by locking dialog buttons per dialog, not across dialogs with the same label.
- Fixed deleted or duplicated NPCs returning, memory leaks and several owner and UI issues.
- Fixed the Epic Fight Wither Skeleton NPC missing its Epic Fight mob patch.
- Changed requirements: same mod version on client and server, Easy Model Entities 2.5.0+.
- Changed backups of all worlds and killed NPC data to expire after 30 days, see
storage.cfg. - Added "Jump", "Assist Owner" and "Follow Nearest Player" to fix #845, fix #310, fix #761.
- Added an NPC inventory with item pickup and death drops to fix #111, fix #197, fix #543, fix #670.
- Added "Sit on Shoulder", a boss bar and
/easy_npc debug core loglevelto fix #577, fix #219. - Added the "Hold" animation mode, a "Bank Teller" preset and new API methods for addons.
### 7.14.0
- Fixed #846 by keeping custom poses for players who start seeing the NPC later.
- Fixed attribute and trading settings missing for players who start seeing the NPC later.
- Fixed changed max uses, XP and trading type not shown in the trading screens until reload.
- Fixed
/easy_npc sound setchanges not reaching players until the NPC was reloaded. - Added game tests that check NPC poses and settings after respawns and for new players.
### 7.13.0
- Fixed color and formatting tags in dialog button names showing as plain text.
- Fixed the button preview in the editor showing lowercase names as a raw translation key.
- Fixed the "Move EasyNPC" item not working for NPC owners outside of creative mode.
- Fixed
/easy_npc owner setreporting success even when the owner could not be changed. - Fixed the game crashing when the URL or player skin screen showed a skin download error.
- Fixed the preset browser search showing no results after scrolling down the list.
- Changed the network protocol version, so client and server must run the same mod version.
- Added
@initiator,@npcand@score()support to dialog button names to fix #841. - Added automatic client tests with the Client Runtime Interface Toolkit.
- Larger core refactoring and code cleanup.
### 7.12.2
- Fixed the Fairy hitbox being far too small, so its name tag and speech bubble sat in its body.
- Fixed scaled NPCs keeping their old hitbox and eye level, so hits, clicks and looking missed.
- Fixed oversized names, lists and NPC data in network packets being read without any limit.
- Fixed invalid NPC positions, scales, attributes, names and durations from being applied.
- Changed Fairy NPCs to take up the space of their model, so they collide and can be clicked.
- Changed Skeleton, Stray and Bogged NPCs to the vanilla hitbox height, they were slightly short.
- Changed the network protocol version, so client and server must run the same mod version.
### 7.12.1
- Fixed #836 by always showing "Restore", including datapack presets, with a reason tooltip.
- Fixed preset import and export messages missing, wrong or not warning about replaced NPCs.
- Fixed the preset browser reloading on each keystroke, leaking NPCs and clearing the selection.
- Fixed the preset list sorting, filter order and layout clipping options in small windows.
- Fixed
/easy_npc preset import datawithout a position importing it as a default preset. - Fixed spawn rate limit leaks, unstable preset IDs and "Spawn New" stacking NPCs on one spot.
- Changed "Restore" to refuse instead of spawning a copy when it is not permitted.
- Added sorting, a match count, reload, auto-close, the NPC ID and tooltips for presets and skins.
- Added
matching <pattern>batch imports with limits, a confirmation and a clickable position.
### 7.12.0
- Fixed #833 by showing Easy NPC Wand outlines only to the wand holder, owner and admins.
- Fixed #834 by adding "Set Home Here" and "Reset Home" buttons to the position configuration.
- Fixed #835 by keeping the NPC ID and position in exported presets, so imports restore the same
- Fixed preset imports and spawn eggs losing the owner's list entry and owner objectives.
- Fixed NPCs restored from an automatic backup losing their owner and becoming ownerless.
- Fixed selection lists showing only their first six entries and hiding the rest.
- Changed importing a preset to update the original NPC at its stored position instead of adding a
- Changed completed trades to play the "Trade completed" sound, which stayed silent before.
- Changed the API dialog call to report an unknown dialog label instead of always reporting success.
- Changed NPCs without arms to carry held items at the head or body instead of hiding them.
- Changed the optional Easy Model Entities dependency to require version 2.4.0 or newer.
- Added a "Sound" configuration with sounds for dialogs, speech, swimming, eating and fall damage.
- Added a searchable sound selection with volume and pitch sliders to the "Sound" configuration.
- Added a "Block Vehicles" option to keep NPCs out of boats, minecarts and modded chairs.
- Added the profession selection to all skin configurations and a new built-in skin per NPC type.
- Added client settings to hide name tags behind walls and
highlightEnabledfor wand outlines. - Added an "Exists" condition operation and API access to NPC movement, actions and presets.
### 7.11.0
- Fixed #828 by no longer freezing the server on logout when NPCs follow or watch the player.
- Fixed #831 by moving routine NPC removal messages to the debug log.
- Fixed #832 by making humanoid NPCs ignore custom player models, animations and poses.
- Fixed hourly NPC backups stuttering on large worlds and retaining timestamps of removed NPCs.
- Fixed owner-login restoration duplicating, repeatedly restoring, reviving or moving unloaded NPCs.
- Fixed NPC index and file synchronization issues causing lost NPCs, crashes or false warnings.
- Fixed stale NPC data after unloading, avoided redundant writes and added repeated-unload warnings.
- Fixed the preset browser failing to list custom and world presets saved in the SNBT format.
- Fixed speech bubbles losing their text and turning translucent with Iris shaders.
- Fixed text formatting and macro parsing for translated speech bubbles and mod API texts.
- Added
minLightLevelto keep speech bubbles readable in dark surroundings.
### 7.10.0
- Fixed #829 by allowing bats and other non-walking mobs as the render entity of a Doppler NPC.
- Fixed NPCs rendered as a bat, frog or warden showing a static pose instead of their animation.
- Fixed the NPC name tag showing above the previews in the "Custom Models" configuration.
- Fixed speech bubbles being cut off by walls, doorframes and the NPC's own body.
- Fixed the previews in the "Custom Models" configuration.
- Changed the previews in the "Custom Models" configuration to stand on a common ground line.
- Changed overlapping speech bubbles to move apart and to stay visible when the NPC is off-screen.
- Changed "Navigation: Automatic" to use flying movement for NPCs rendered as a flying mob.
- Changed the render entity list to hide seats, paintings, thrown items and other non-mob entities.
- Added a "Min. hover height" slider for flying NPCs and client settings for speech bubbles.
### 7.9.0
- Fixed modded fish NPCs, like the ones of Tide 2, spinning around instead of swimming upright.
- Fixed "Navigation: Automatic" using ground movement for water NPCs and aquatic model NPCs.
- Fixed the "Random Swimming" objective never moving an NPC that uses aquatic navigation.
- Fixed a swimming NPC shaking or twitching in place instead of holding its tilt and swim depth.
- Fixed a swimming NPC turning in circles forever when it could not reach its next path point.
- Fixed an NPC that fell into water never getting out of it again.
- Fixed a following NPC searching a new path every tick while its target was unreachable.
- Fixed the "Move to" actions stopping short of a raised target or not starting while in the air.
- Fixed "Move back to Home" ignoring height differences and never returning from beyond 32 blocks.
- Fixed the "Opacity" input field being too narrow to show a value of 100.
- Fixed a damaged NPC with an Easy Model Entities model never flashing red.
- Changed modded water NPCs to swim level, vanilla water mobs keep their tilt as before.
- Changed the "Move to" actions to walk up to 48 blocks and to teleport only beyond that range.
- Changed "Move to" and "Move back to Home" to give up after three seconds without progress.
- Changed the timeout of a "Move to" action to count real ticks, it ran twice as long before.
- Changed a new "Random Swimming" objective to rank below following, fleeing and attack goals.
- Changed "Opacity" of an NPC with an Easy Model Entities model to be applied by that mod itself.
- Changed the minimum Easy Model Entities version to 2.3.0, older versions disable the integration.
- Added "Depth below surface" and "Height above floor" sliders for the swim level of an NPC.
- Added log entries for the NPC files written on a world save, with a warning above 250 ms each.
### 7.8.1
- Fixed #827 by rendering fish NPCs in water upright instead of always flopping on their side.
- Fixed #828 by keeping a damaged NPC from blocking the world save, it now falls back to defaults.
- Fixed a restored NPC picking up a random preset ID that changed with every save.
- Changed NPC data to only be written to disk when it actually changed.
### 7.8.0
- Fixed smaller text and UI issues.
- Changed an NPC that is already standing at its target position to finish the movement right away.
- Changed the "None" skin tab to "Advanced", which now holds "Disable Skin" and the texture field.
- Added a "Move to" action, which sends an NPC to a position, a player, its owner or its home.
- Added a "Move to and Wait" action, which runs the following actions only after the arrival.
- Added an arrival radius, a timeout and an optional teleport to both move actions.
- Added an "Opacity" attribute from 0 to 100, which fades body, armor and hand items together.
- Added a "Set Opacity" action, which turns an NPC into a ghost or hides it completely.
- Added the "Lantern Wraith" preset, a ghost walking a square with a short line at every corner.
- Added API access to the move actions and the opacity of an NPC.
- Added a "Resource Location" skin type, which renders any texture of a mod or a resource pack.
- Added an "Advanced" skin tab, which previews the NPC with the entered texture before applying it.
### 7.7.7
- Fixed #821 by keeping the transparency of 64x64 skins, which Fresh Moves needs for its eyes. Skins
- Fixed #818 by running trade actions for Villager and Wandering Trader NPCs as well.
- Fixed a dialog with several text variants switching its speech bubble size every second.
- Fixed the skin cache storing the processed image instead of the original download.
- Fixed the untranslated interval names, like
PER_DAY, of the "Execution Limit" condition. - Fixed the
sitanimation of Easy Model NPCs, which never used the built-in sitting pose. - Fixed the speech bubble being cut off by the head of an NPC when a player stood close to it.
- Changed speech bubbles to keep their screen size and to move down or aside when a player is close.
- Changed the speech bubble text to render 20% larger than a name tag.
- Changed a time based action set with a "Wait" action to run in order instead of picking one entry.
- Changed dialog texts to wrap later, so an existing dialog can switch to the wider screen layout.
- Changed fallback actions to skip screen actions without a player, like the regular actions do.
- Changed the minimum Easy Model Entities version to 2.1.0, older versions disable the integration.
- Added a "Wait" action, which pauses the following actions of an event for a chosen duration.
- Added the "Countdown Timekeeper" preset, a speech bubble count to ten ending in sound and sparks.
- Added scaling and rotation for Doppler NPCs behind the "Experimental Features" checkbox. Both only
- Added a "Sound" action, which plays a sound at the NPC with sound category, volume and pitch.
- Added "Every 5 Minutes" and "Every 15 Minutes" to the "Execution Limit" condition.
- Added a "Player Idle" condition, which checks how long a player has not moved.
- Added an "Immovable" attribute, which keeps an NPC in place against pushing and knockback.
- Added
/easy_npc pauseto pause a single NPC or all NPCs; the global pause ends with the server. - Added API access to the sound action, the pause state and the idle time of a player.
- Added a texture override per model slot for Easy Model NPCs over
/easy_npc render texture. - Added a "Repeat" playback mode with a count and a time limit to the "Play Animation" action.
- Added API access to animation variants, texture slots and textures of Easy Model NPCs.
### 7.6.0
- Fixed unclear mod conflict errors for duplicate entity data tracker IDs.
- Fixed third-party health bars rendering over NPC previews in configuration and dialog screens.
- Fixed Doppler and Easy Model Entities NPCs using default hitboxes instead of their model size.
- Fixed the
/easy_npccommands suggesting no NPC UUIDs at all on a server. - Fixed the pose list of the "Set Pose" action drawing over its input field.
- Fixed the untranslated "Loop", "After current" and "Action Data Type" labels of the action editor.
- Fixed the missing hint text of the "Chance" condition.
- Fixed long condition hints running out of the editor screen instead of wrapping.
- Fixed the misaligned help icons and text buttons of the "Message" action.
- Fixed changes to the "Set Pose", "Play Animation" and "Stop Animation" actions not being saveable.
- Fixed the speech bubble text sitting closer to its upper border than to its lower one.
- Changed the NPC suggestions to list the crosshair NPC first and only own NPCs without permissions.
- Changed a preset export to only store what differs from a new NPC, without position or owner.
- Changed a preset without objectives or actions to fall back to the defaults of its NPC type.
- Changed events without a player, like "On Spawn" or "On Kill", to check their conditions. An
- Changed a time based action to pick the owner as
@initiatorwhenever the owner is nearby. - Changed speech bubbles to stay visible from 5 up to 18 seconds, depending on the text length.
- Changed the "Set Pose" action to only show its input field for the "custom" pose entry.
- Added time based actions on five fixed steps, from every ~1 second up to every ~15 minutes.
- Added a "Message" action for chat, system message and speech bubble text without a command.
- Added text variants, a sender name, a recipient and translation keys to the "Message" action.
- Added the speech bubble graphic as
easy_npc:textures/gui/speech_bubble.pngfor resource packs. - Added a "Chance" condition in percent and a "Relationship" condition for owner and faction.
- Added spawn, owner login, state change, day / night, weather and the missing "On Trade" events.
- Added a base preset per NPC type under
easy_npc:api/preset/base/, usable as a parent preset. - Added the "Wandering Companion" preset, a talkative NPC built from time based messages.
- Added an action registry, an action handler, a preset validator and richer event data for mods.
- Added a tooltip with name, type and distance to every NPC suggestion of the
/easy_npccommands. - Improved the NPC suggestions, which appear without typing and tolerate a near miss of one block.
### 7.5.0
- Fixed #814 by giving every Cobblemon NPC its own animation state instead of one per species.
- Fixed #813 by letting "Move back to Home" work at any distance instead of only near its home.
- Fixed #812 by checking once per session whether a player changed their skin.
- Fixed #810 by accepting Cobblemon aspects of resource packs instead of only "shiny" and "female".
- Fixed NPCs losing their owner, home and "No Gravity" setting after a respawn or a preset import.
- Fixed objectives keeping a gone target and being switched off when their target or mod was gone.
- Fixed flying NPCs like Allay, Vex and Ghast moving on the ground instead of flying.
- Fixed dialog, button, preset, pose and texture names with duplicates or special characters.
- Fixed conditions not being editable on a dedicated server and untranslated condition texts.
- Fixed Easy Model Entities NPCs not turning their head and their model list ignoring a
/reload. - Fixed the "Legacy Easy NPC Data" warning appearing for newly created NPCs.
- Fixed missing transparency corrections for old 64x32 skins, which showed layer artifacts.
- Fixed the player skin screen freezing for a moment while a player name was looked up.
- Fixed the "Reset look at ..." objective label, which read "Reset loot at ..." in some languages.
- Fixed the Fabric game tests, which crashed on start because of the development helper mods.
- Fixed the NPC data isolation and trading persistence game tests, which never ran on Fabric.
- Fixed walking animation for Doppler NPC and 3rd party models.
- Changed the movement objectives to a fixed order: flee, follow, return home, then stroll. NPCs
- Changed datapack presets to
easy_npc/preset/, the old folder still works, but only for easy_npc. - Changed the required Easy Model Entities version to 1.7.0, floating models now hover by default.
- Removed the experimental user-defined NPCs and the unused
SERVER_SKINskin type. - Added NPC states with number, yes/no and text values, usable as condition, action and command.
- Added a "Navigation" and a "Hover height" setting to switch any NPC between ground and flying.
- Added parent presets, presets from other mods, a preset visibility and the "Forge Keeper" preset.
- Added custom conditions, events, an NPC identifier and more objective options for other mods.
- Added "On Far Distance" at 32 blocks and an option to spawn an NPC again when its owner logs in.
- Improved flying navigation and third party support with an API for presets and own objectives.
### 7.4.0
- Fixed #807 by no longer pulling every same-type NPC within 32 blocks into a "Defend Self" fight.
- Fixed #805 by evaluating all visibility settings together instead of stopping at the first one.
- Fixed #804 by keeping the custom name on Doppler NPCs for name based textures and the name tag.
- Fixed #803 by adjusting assets to match typical Minecraft style instead of generic UI style.
- Fixed the day and night detection, which counted sunrise as night and sunset as day.
- Fixed the visibility in the Nether and the End, which used the Overworld time.
- Fixed the time and game mode visibility checkboxes appearing in a random order.
- Fixed game tests only being able to fail on their first assertion, which hid later failures.
- Fixed the "Saddled" horse skin variants, which never showed a saddle.
- Changed "Visible to Owner" and "Visible to Team" to also follow day, night and game mode.
- Changed Evoker, Illusioner and Vindicator variants without "Crossed Arms" to keep their arms down.
- Added a "Defend Faction" objective that attacks whoever hurt a nearby faction member or player.
- Added a system message when faction members fight each other and the faction stays out of it.
- Added a head equipment slot for Illagers so their captain banner can be removed or swapped.
- Added a day and night preview to the display configuration screen.
- Added unit and game tests for the visibility attributes and the faction defense.
- Improved the visibility check performance by reading the display attributes only once per check.
- Improved display attributes from older versions by completing them with their defaults.
- Improved the attack objective screen by disabling "Protect Owner" and "Defend Faction" when unset.
### 7.3.0
- Improved skin variants by carrying their data as typed fields instead of parsing variant names.
- Centralized the Cobblemon mod id and default model on shared constants.
- Reduced duplicated enum code with a shared
EnumUtilshelper forget(String)lookups. - Optimized villager profession and type lookups to use direct registry keys instead of scans.
- Optimized enum name lookups by caching tag names, ids and keys once at construction.
- Added unit and game tests for skin variants, villager resolution and the enum helper.
### 7.2.0
- Fixed #801 by using combination for NPC, Dialog and Action UUIDs to avoid collisions for action
### 7.1.1
- Fixed #800 by lazy loading entity types.
- Fixed #799 by fixing edge cases and adding additional documentation and better log messages.
- Fixed #798 by considering console, commands and command blocks as trusted command sources.
- Fixed a critical single-player / LAN issue where client and server NPCs shared the same registry.
- Fixed a memory leak in the configuration menu handling and added timeout and disconnect cleanup.
- Fixed duplicate downloads when several NPCs request the same skin at the same time.
- Fixed skin lookups failing after a error so a slow server no longer freezes the game.
- Fixed the URL skin screen freezing the game while checking a remote image; the check now runs in
- Added a new World Spawner block that limits an NPC preset across the whole world (all dimensions),
- Hardened remote skin downloads with a strict size limit and safe redirect handling to prevent
blockPrivateAddresses setting.- Improved server performance by only sending entity and player load events to NPCs that actually
### 7.0.0
- Fixed #791 by adding Wandering Trader NPC type.
- Fixed #788 by extending the AI safeguards to Epic Fight and raw NPC variants (Piglin, Villager,
- Fixed #787, #531, #237 and #184 by adding a faction system with
/easy_npc factioncommands,
- Fixed #787, #771 and #572 by adding a new
targetobjectives tab to attack hostile factions or
- Fixed #786 by adding gender and shiny model variants for Cobblemon NPCs, searchable via
female
shiny in the model selection.- Fixed faction combat between invulnerable NPCs by adding the new
Attackable by Factionscombat
- Fixed Cobblemon model selection previews for oversized species by scaling with Cobblemon's own
- Fixed faction management edge cases by validating faction names, sorting faction lists and
- Fixed custom skin reloads by loading and clearing texture caches per skin model instead of always
- Improved the
Attackable by Players/Monsters/Factionscombat attributes to work independently of
Invulnerable, each opening a targeted hole for its own attacker group.- Improved preset command and network handling by splitting the large handlers into smaller focused
- Added Easy Model Entities Support.
- Added faction manager and faction editor screens to create, color and delete factions and manage
FACTION_MANAGEMENT security feature.- Added new
Miscattributes tab as home for the NPC faction assignment. - Added reusable warning and help icon components for inline hints with tooltips.
- Added additional unit and game tests for factions, target objectives and Cobblemon model variants.
### 6.25.0
- Fixed #782, #636, #622 by preserving data components during validations.
- Fixed #780 by caching remote texture downloads and reducing duplicate registrations.
- Fixed #767 by clamping attribute sliders against extreme values from other mods.
- Fixed #754 by adding custom data item matching for NPCs with actions and conditions.
- Fixed texture manager running in the wrong thread may cause crashes and deadlocks in >= 1.21.x.
- Fixed empty UUID handling for action conditions.
- Fixed execution limit reset for actions.
- Added texture registration queue to avoid multiple simultaneous downloads in the same tick.
- Added NPC coin, key and red token as consumable items for NPCs with actions and conditions.
- Added
Welcome Coin Traderas example NPC preset with custom coin, key and red token item data. - Added attribute safeguards against extreme values from other mods.
- Increased fallback max health value from 1024 to 4096 for high-health NPCs.
- Improved texture manager by reducing duplicate texture checks and registrations.
### 6.24.0
- Fixed #459, #775 by adding an option to block interactions with invisible NPCs.
- Fixed #774 startup crash related to optional Epic Fight and Cobblemon entity type maps.
- Fixed #773 by checking timed trade resets during base ticks and before opening trade screens.
- Fixed trade reset timing by increasing internal tickers correctly.
- Added time of day and weather conditions for #459.
- Added additional unit and game tests for trade resets, ticker handling and entity attributes.
- Added
Skywatch Scoutas example NPC preset with time of day and weather conditions.
### 6.23.0
- Fixed #772 by adjusting texture retries with 403 and 404 errors and lowering logging.
- Fixed #770 item rendering for Epic Fight NPCs (Evoker, Pillager, Vindicator and humanoid skins).
- Fixed #769 door loops with NPCs not reliably opening or closing doors.
- Fixed #760 by adding a dialog option and config setting (buttonConditionMode: LOCK or HIDE) to
- Fixed #709 by adding color picker popup for names with 32 colors and/or a manual RGB/hex value.
- Fixed NPC name color being reset when renaming without a specified color by preserving the
- Improved the door movement attributes so "Pass Door" is automatically enabled while "Open Door"
### 6.22.0
- Fixed #766 by passing the full server player context to command execution for better compatibility
- Fixed #764 by adding entity health, npc health conditions and NPC preset
Grukk, the Sparring Post as example for using these conditions.- Fixed #763 by making sure dialog button execution limits are now recorded.
- Fixed #758 by providing a example NPC preset named
One Wish Companion. - Fixed crashes related to 3rd party villager AI reading non-registered brain memories on Easy NPC
- Fixed Dialog buttons are not locked for server-side data as preparation for #760 and #644.
- Fixed #628 by adding conditional dialog opening support / command for better control over when
- Added brain AI for Piglin and Piglin Brute NPCs and registered the full vanilla brain memory set.
- Added additional guns to the gun tag for #757.
- Added a new "Open Dialog (Conditional)" action that opens a named dialog only if its conditions
- Added new entity health and npc health conditions for actions, dialogs and dialogs buttons.
- Added Piglin, Piglin Brute and Zombified Piglin NPCs invulnerable, for consistency with other
- Added a new "Knockback Immunity" combat attribute that prevents the NPC from being knocked back by
- Added a new "Explosion Immunity" combat attribute that makes the NPC immune to explosion damage
- Moved the "Projectile Collision" attribute to the Combat attribute screen, where it fits better
### 6.21.0
- Fixed item attachment for Illagers in crossed-arms pose.
- Fixed broken illager crossbow attack goal.
- Fixed crashes related to 3rd party items which are not renderable as hand items #756.
- Fixed crashes related to 3rd party mixins trying to access non-existing model parts #756.
- Fixed log.info spam message by reducing log verbosity and adding additional checks for custom
- Improved EasyNPCModelManager performance.
- Refactored NPC renderers to remove default hand item layer.
### 6.20.0
- Fixed crashes related to 3rd mods trying to access non-existing NPCs goals.
### 6.19.0
Note: This update adjusted the dialog background images by 10x6 pixels, which may require users to
adjust their custom dialog backgrounds if they are using custom ones.
- Fixed #752, #130 by adding dialog button condition support to allow to disable buttons.
- Fixed #683, #215 by adding typewriter effect support for dialog text.
- Fixed #690, #309 by allowing conditions for dialog, dialog buttons and interactions.
- Fixed smaller UI issues with dialog screen layout and background.
- Refactored dialog background images by 10x6 pixels on each side.
- Refactored dialog screen layout to better fit the new background size and improve appearance.
- Added typewriter effect and client configuration for dialog text.
- Added condition symbols to indicate the condition status for dialog, buttons and interactions.
- Added amount field for item conditions to allow checking for specific amounts of items.
- Added
Threshold Wardenas example NPC preset with various conditions and actions. - Added smaller bug fixes and optimizations related to dialog conditions and button states.
### 6.18.0
Note: This update changes the internal data format for conditions and actions, which may reset /
remove legacy existing execution-limit entries without stored IDs.
- Fixed #745 by adding conditions for actions to allow more complex and dynamic behavior.
- Fixed #652 by adding dialog button tooltip for longer texts.
- Fixed #687 by adding command value tooltip to show the full value.
- Added Experience Level conditions.
- Added Game-mode conditions.
- Added has item in inventory condition.
- Added has item in hand condition with (main hand and off-hand) support.
- Added player health condition.
- Added player tag condition.
- Added player team condition.
- Added Goldmere example NPC preset with various conditions and actions.
- Added negative condition support to allow negating conditions for more complex logic.
- Removed parameter pseudo IDs for
ActionDataEntryand replaced them with random UUIDs. - Refactored condition system to allow more condition types.
### 6.17.0
- Fixed #738 by adding additional tooltips for "Execute as player"
- Fixed to detailed logs by reducing log.info messages during startup and in-game.
- Added additional unit and game-tests.
### 6.16.0
- Fixed #732 by providing option to disable ESC key and close button for dialogs.
- Fixed #723 by avoid auto-close in specific cases like trading screens.
- Added general dialog configuration options to allow users to customize dialog behavior.
- Added avatar scaling and position offset options for dialogs.
- Added missing translation keys.
### 6.15.0 (Trades, Player Heads, Epic Fight and QOL updates)
- Fixed #731 by resyncing species data, if species list is empty on the client.
- Fixed #730 by improving Epic Fight integration and enabled experimental features.
- Fixed #729 by making sure trade uses are stored correctly.
- Fixed #728 by adding custom head support for player heads.
- Fixed #689 by showing remaining trade uses and allow resetting manually and automatically.
- Fixed #218 and #132 with new trade configuration screen and better support for custom trades.
- Fixed trade specific edge by switching between basic and normal/advanced trading mode.
- Fixed dialog button text is truncated with tooltip showing the full text.
- Fixed Cobblemon animation issues by syncing animation state with Cobblemon Animation System.
- Added per trade specific actions to allow users triggering actions after buys.
- Added trade reset button to reset all trades easily.
- Added trade usage information to trade configuration screen.
- Added experimental feature state to allow users to manually enable experimental features.
- Added Griselda Grindstone as example trader with actions.
- Cleanup test files.
### 6.14.0
- Fixed #727 by making sure changes are synced to the client when changing values.
- Fixed #726 by adding additional allow lists for specific commands.
- Fixed #686, #389, #304, #211 by adding basic Cobblemon support with Cobblemon NPC.
- Fixed dialog misalignment and navigation issues by adjusting dialog sprites and screens.
- Fixed x and z root rotation by correcting rotation logic and pivot calculations.
- Added basic Cobblemon support with custom NPC type and model for testing.
### 6.13.0 (Security and Permissions Updates)
Notes: This update includes better security checks and permissions for multiplayer environments. It
allows to execute server commands which can be potentially dangerous if used with malicious intent.
- The update splits the model root data and logic from the rest of the model part data and logic,
- Fixed #725 by separating model root data and logic from the rest of the model part data and logic.
- Fixed #722 by supporting .sbnt files as local presets.
- Fixed #675 by adding dedicated assets for dialog and config screen backgrounds.
- Fixed #605, #532, #529 with new security checks and permissions system.
- Fixed #469, #311 by adding experimental api documentation and examples for custom model support.
- Fixed double rendering of config screen background by removing redundant background rendering.
- Fixed Ghast and Slime hitbox and name tag position issues by adjusting bounding box.
- ⚠️ Added security checks to prevent potential exploits and allow safe usage in multiplayer
- Replaced dynamic dialog screen background with a static one for better performance, customization
- Replaced dynamic config screen background with a static one for better performance.
- Refactored config-ui specific components and removed them from the core mod.
- Removed duplicated sprite sheets.
- Prepare permission system for possible Luck Perms integration in the future like #712.
- General code cleanup and optimizations related to config screen rendering and assets.
### 6.12.0
- Fixed #714 by adding additional checks for custom model part list based on vanilla models.
- Fixed #713 by reducing log verbosity with downgraded per-NPC INFO messages to DEBUG and
- Fixed #711 by reduced oversized startup/config log output.
- Fixed NBT validation guard to prevent unnecessary buffer allocations in production.
- Added model part name constants to EasyNPCModelManager for consistent usage across mixins.
- Improved RenderEntityTypeSupportConfig by enhancing filter logic and optimizing data structures
- Removed verbose debug logs that dump large data structures.
### 6.11.1
- Fixed #710 by improving backward-compatible parsing for recoverable trade data.
### 6.11.0
- Fixed #703 rendering issue with new custom layer system and hand renderings.
- Fixed #701 by adding additional safeguards and logging for invalid trading offers.
- Fixed smart animation not working properly with modified head position.
- Fixed head tracking by moving player detection back to server side-only.
- Fixed CustomLookAtPlayerGoal to better handle edge cases and reduce jitter.
- Fixed issue with Doppler NPCs keeping their hand inventory.
- Improved PoseManager logging message.
- Updated logo with a new design.
### 6.10.0
- Fixed #698 by adding try and catch for 3rd party entity creation.
- Fixed #695 by clearing model part rotations/positions when switching to a
DEFAULTvanilla pose. - Fixed #695 by applying lock rotation and pose animation only when the NPC is idle.
- Fixed #695 by correcting root rotation pivot to use actual bounding box height instead of 0.5f.
- Fixed multiple objective registration issues including inverted
isTargetedPlayercheck, wrong
targets.
- Fixed goal reference being retained after objective is unregistered.
- Removed auto-lock of ROOT rotation when loading poses; root lock is now user-controlled.
- Added lock rotation checkbox to the advanced and custom pose configuration screens.
- Added model-specific pose key filtering in
ConfigurationMenuHandlerfor the default pose screen. - Added unit tests for
CustomPosition,CustomRotation,CustomScale,ModelPose,
ModelAnimationBehavior and ModelAnimationData.- Added
NPCDataIsolationTestHelperand game tests for Fabric and Forge. - Increased max head yaw range from 60° to 65°.
### 6.9.0
- Fixed #692, #666 by adding caching and safeguards to prevent redundant retriggering of NPC entity
- Fixed #651, #617 by adding basic custom poses for all supported NPC types.
- Fixed #597 by adding additional Flee goals for fleeing from players, villagers, monsters, ...
- Fixed pose loading to read directly from mod resources instead of copying files to disk.
- Fixed duplicate
saveNPCcalls on entity join by checking existing registry entry first. - Added
despawnandspawncommands to remove and re-spawn NPCs by UUID with configurable removal
- Added
ModelPoseAPIandEasyNPCEntityHandlerpublic API classes for controlling NPC poses and
- Added pose data files for all supported NPC types.
- Added lock rotation checkbox to the basic pose configuration screen.
- Added
MoveToPositionGoalto move an NPC to a position before executing a callback action. - Added
EasyNPCLookControlandEasyNPCBodyRotationControlto respect locked root rotation. - Added synced owner change and dimension change to the NPC entity data index.
- Added EasyNPCItemAttachmentLayer into various entity renderers.
- Added dedicated
Flee Objectiveconfiguration tab with objectives for fleeing creepers, monsters,
- Added
FOLLOW_ITEMobjective to the follow objectives tab to make NPCs follow item entities by
minecraft:apple).- Added
LookAtEntityByUUIDGoaland enabled the look-at-entity-by-UUID and look-at-owner objectives
- Added
persistentflag toSynchedDataIndexso that transient indices (e.g. crossbow charge,
- Added configurable
customParticlesEnabledflag toSlimeBasefor API consumers. - Added
SoundType.PETand mappedCAT_PURRto the cat NPC for tamed ambient sound variety. - Reduced log verbosity for periodic NPC save operations from INFO to DEBUG.
### 6.8.3
- Fixed #680 by enforcing version miss-match by upgrading network protocol version.
- Fixed #679 by resetting position, rotation and size for name tag.
- Fixed #665 by adding multi state slide for root rotations.
- Fixed #664 by adding option to disable following mouse cursor for easier posing.
- Fixed #663 by improve support for X and Z root rotations.
- Fixed #661 by adding quick rotation with NPC wand and sneaking to the NPC to rotate the root to
- Fixed move tool is wrongly triggering interactions by adding check for move tool in interaction
- Fixed Preset Item is wrongly triggering interactions by adding check for preset item in
- Fixed Slime and Ghast hitbox and name tag position issues by adjusting bounding box and eye height
- Fixed Slime and Ghast GUI position by adjusting offset values.
### 6.8.2
- Fixed #677 by extending
SafeMerchantDatawith notifyTrade to avoid crashes. - Added progression data support for leveling up NPCs based on player interactions and actions.
- Added global NPC tracking system for better management and debugging of NPCs across the world.
- Added
OriginalModelConfig.withVariantTexture()option to allow using variant textures with the
### 6.8.1
- Fixed #676 by using existing preset helper method instead of custom one.
### 6.8.0 (Adding API support)
- Fixed #667 by adding warning messages and additional checks for invalid network packets.
- Fixed Horse spawn eggs model.
- Fixed pose support for allay, chicken, creeper, fox, ghast, horse, illager, iron golem, slime and
- Added NPC base classes for better API support.
- Added NPC raw classes for advanced API support.
- Added Slim and Ghast NPC types.
- Added Custom Model API for easier integration with other mods and custom models.
- Refactored internal data handling and registration for better maintainability and future
### 6.7.1
- Fixed #657 and #656 by adding additional client side checks for vanilla bug.
### 6.7.0
- Fixed #650 by implementing Wolf Leg Animations in setupAnim method.
- Fixed #648 by fixing canBeHitByProjectiles translation.
- Fixed #645 by adding
allowBypassInvulnerabilityconfig option to allow/deny bypassing
- Fixed delete button showing label even with small width.
- Fixed up and down buttons not positioned correctly in some cases.
- Fixed name tag showing up for dialog and configuration UI.
- Fixed distance action issue were multiple actions are not properly triggered.
- Fixed issues with NPC presets.
- Fixed Cat NPC and Wolf NPC owner data not syncing properly.
- Added preset browser for easier selection of common NPC presets.
- Added preset .snbt (text) export and import functionality for sharing NPC presets.
- Refactored existing NPC presets to use new .snbt format.
- Refactored spawner system to use new preset format for better maintainability and future
### 6.6.2
- Fixed #643 by rework scaling system.
- Fixed scaling not properly updating hitbox and nametag position after restart / reload.
- Added MID and MOUSE_OVER name tag visibility modes for finer control over NPC name display.
- Added team-based name tag visibility support respecting vanilla Team.
### 6.6.1
- Fixed #638 by refactored internal data handling for display attributes.
### 6.6.0
- Fixed #634 by implementing asynchronous texture loading with dedicated thread pool.
- Fixed texture loading blocking render thread causing game freezes.
- Fixed race conditions in texture reload protection using atomic operations.
- Fixed resource leaks in HTTP connections during remote texture downloads.
- Fixed URL validation spam allowing multiple simultaneous downloads of the same texture.
- Fixed exception handling for remote image validation preventing crashes on invalid URLs.
- Fixed
defineId called for:warning messages during NPC loading. - Refactored texture loading architecture with multi-level defense and rate limiting.
- Refactored entity data registration logic for better maintainability.
- Converted data classes to modern Java records for better immutability and thread-safety.
- Added thread-safe session server spam protection with ConcurrentHashMap.
- Added comprehensive error recovery with automatic cooldown reset on failures.
- Improved texture loading with 2-thread pool and 500ms rate limiting.
- Improved exception handling with specific catch blocks for IIOException and FileNotFoundException.
### 6.5.2
- Fixed Villager profession and job skin issue.
- Improved GitHub workflows by adding cache for gradle dependencies.
- Improved Gradle build time and cleanup tasks.
### 6.5.1
- Fixed #632 by implementing ON_KILL action type and event.
- Fixed #629 by improving texture handling performance, caching, and memory usage.
- Fixed kill command is not working on NPCs.
- Fixed texture reload protection preventing cache reload after eviction.
- Fixed WebP validation bug in remote image validator (missing return statement).
- Refactored texture handling logic for better maintainability and future improvements.
- Added time-based reload protection (60 seconds) to replace permanent blocking mechanism.
- Added additional unit tests for texture handling.
- Improved gradle build tasks.
### 6.5.0
- ⚠️ Removed jar-in-jar bundle approach for better mod compatibility and api capabilities.
- Fixed #627 scissor implementation for better compatibility with other mods.
- Fixed #625 lively animation issues when using rotated or moved model parts.
- Fixed default animation are canceled when using scaled model parts.
- Added better pose animation control with smart, default und none options.
### 6.4.1
- Fixed #626 screen switching logic for different NPC UUIDs, thanks to
Spawnbladefor the detailed
### 6.4.0
- Fixed #626 by improving dialog data validation and error handling.
- Fixed #623 by refactoring render data and render handling.
- Fixed #622 by making sure custom data are properly saved and loaded.
- Fixed open dialog action type to allow opening dialogs from other NPCs.
- Fixed hashing issues by adding missing equals and hashCode methods for ConditionDataSet and
- Added custom data test item for #622 and easier testing of custom data.
- Improved records and fixed potential issues with missing data.
### 6.3.0
- Refactored config ui specific components and removed them from the core mod.
- Fixed dialog data by filtering dialog data before sending to the client.
- Fixed dialog editor layout issues and improved usability.
- Fixed missing default values for some dialog data fields.
- Added dialog priority support to control the order of dialog execution.
- Added condition support for dialog and scoreboard actions.
- Added frequency support for dialog to limit how often an dialog can be shown.
- Added new NPC preset to for scoreboard and condition support.
- Improved dialog button data format by removing redundant fields.
### 6.2.0
- Fixed string injection within dialogs.
- Fixed missing translation for action types.
- Added scoreboard action type to increase, decrease, set scoreboard values.
- Added
@score(...)NPC macro to display scoreboard values in the dialog. - Added additional unit tests.
- Improved spin button with indicators and better usability.
### 6.1.2
- Fixed container and menu sync issues with missing close container packets.
- Fixed close button not working in some cases.
- Fixed jumping mouse cursor between screen transitions.
- Fixed translation files and removed duplicate and deprecated entries.
- Moved Easy NPC wand to existing core item tab instead of creating a new one.
- Added cat pose support for different model parts (except tail).
- Improved EasyNPCWand glowing effect performance by disabling it when not needed.
- Improved custom entity detection by excluding non-living entities like displays, makers, throwns
- Improved cat variant handling.
### 6.1.1
- Fixed #612 by re-validating entity types.
- Fixed #610 by force sync of hat and head layers for specific models.
- Fixed orc textures.
- Improved custom model support and performance, by moving related logic into to client side only.
- Improved caching of player to UUID mappings for player skins.
- Limited change model commands and logic to Doppler NPCs only.
### 6.1.0 ✨
This is a major release. Please back up your worlds and NPC data before updating. This version
contains many improvements, optimizations, and internal changes that are **not fully compatible**
with earlier releases.
⚠️ Breaking changes
- Existing NPCs and their configuration data from versions before 6.1.0 may not load correctly or
- Internal data formats and some behaviors have been refactored to support new use-cases.
🧩 New modular structure
Easy NPC is now split into three separate mods:
- Easy NPC** – Bundle that includes both Core and Configuration UI for a plug‑and‑play experience.
- Easy NPC: Core** – Lightweight runtime and logic for NPCs, with minimal dependencies. Intended
- Easy NPC: Configuration UI** – Standalone configuration interface for creating and editing NPCs.
🎯 Why this change?
- Allows servers and modpacks to ship only the **Core** mod on the server side for a leaner setup.
- Reduces memory usage and load times when the UI is not required everywhere.
- Makes development and testing faster by separating UI and core logic.
[history]: https://github.com/MarkusBordihn/BOs-Easy-NPC/commits/
[upgrade_guide]: https://github.com/MarkusBordihn/BOs-Easy-NPC/wiki/Upgrading
## Note
This change log includes the summarized changes. For the full changelog, please go to
the [GitHub History][history] instead.
Note: Please always back up your world / NPCs before updating to a new version!
Check the [upgrade guide][upgrade_guide] for more information.
### 7.15.0
- Fixed #838 by keeping preset imports silent when run through
/executeor command blocks. - Fixed #380 by applying the NPC limit to the default spawner as well.
- Fixed #849 by allowing resource pack sounds in the sound configuration.
- Fixed #349 by no longer spawning NPCs left-handed at random.
- Fixed #851 by locking dialog buttons per dialog, not across dialogs with the same label.
- Fixed deleted or duplicated NPCs returning, memory leaks and several owner and UI issues.
- Fixed the Epic Fight Wither Skeleton NPC missing its Epic Fight mob patch.
- Changed requirements: same mod version on client and server, Easy Model Entities 2.5.0+.
- Changed backups of all worlds and killed NPC data to expire after 30 days, see
storage.cfg. - Added "Jump", "Assist Owner" and "Follow Nearest Player" to fix #845, fix #310, fix #761.
- Added an NPC inventory with item pickup and death drops to fix #111, fix #197, fix #543, fix #670.
- Added "Sit on Shoulder", a boss bar and
/easy_npc debug core loglevelto fix #577, fix #219. - Added the "Hold" animation mode, a "Bank Teller" preset and new API methods for addons.
### 7.14.0
- Fixed #846 by keeping custom poses for players who start seeing the NPC later.
- Fixed attribute and trading settings missing for players who start seeing the NPC later.
- Fixed changed max uses, XP and trading type not shown in the trading screens until reload.
- Fixed
/easy_npc sound setchanges not reaching players until the NPC was reloaded. - Added game tests that check NPC poses and settings after respawns and for new players.
### 7.13.0
- Fixed color and formatting tags in dialog button names showing as plain text.
- Fixed the button preview in the editor showing lowercase names as a raw translation key.
- Fixed the "Move EasyNPC" item not working for NPC owners outside of creative mode.
- Fixed
/easy_npc owner setreporting success even when the owner could not be changed. - Fixed the game crashing when the URL or player skin screen showed a skin download error.
- Fixed the preset browser search showing no results after scrolling down the list.
- Changed the network protocol version, so client and server must run the same mod version.
- Added
@initiator,@npcand@score()support to dialog button names to fix #841. - Added automatic client tests with the Client Runtime Interface Toolkit.
- Larger core refactoring and code cleanup.
### 7.12.2
- Fixed the Fairy hitbox being far too small, so its name tag and speech bubble sat in its body.
- Fixed scaled NPCs keeping their old hitbox and eye level, so hits, clicks and looking missed.
- Fixed oversized names, lists and NPC data in network packets being read without any limit.
- Fixed invalid NPC positions, scales, attributes, names and durations from being applied.
- Changed Fairy NPCs to take up the space of their model, so they collide and can be clicked.
- Changed Skeleton, Stray and Bogged NPCs to the vanilla hitbox height, they were slightly short.
- Changed the network protocol version, so client and server must run the same mod version.
### 7.12.1
- Fixed #836 by always showing "Restore", including datapack presets, with a reason tooltip.
- Fixed preset import and export messages missing, wrong or not warning about replaced NPCs.
- Fixed the preset browser reloading on each keystroke, leaking NPCs and clearing the selection.
- Fixed the preset list sorting, filter order and layout clipping options in small windows.
- Fixed
/easy_npc preset import datawithout a position importing it as a default preset. - Fixed spawn rate limit leaks, unstable preset IDs and "Spawn New" stacking NPCs on one spot.
- Changed "Restore" to refuse instead of spawning a copy when it is not permitted.
- Added sorting, a match count, reload, auto-close, the NPC ID and tooltips for presets and skins.
- Added
matching <pattern>batch imports with limits, a confirmation and a clickable position.
### 7.12.0
- Fixed #833 by showing Easy NPC Wand outlines only to the wand holder, owner and admins.
- Fixed #834 by adding "Set Home Here" and "Reset Home" buttons to the position configuration.
- Fixed #835 by keeping the NPC ID and position in exported presets, so imports restore the same
- Fixed preset imports and spawn eggs losing the owner's list entry and owner objectives.
- Fixed NPCs restored from an automatic backup losing their owner and becoming ownerless.
- Fixed selection lists showing only their first six entries and hiding the rest.
- Changed importing a preset to update the original NPC at its stored position instead of adding a
- Changed completed trades to play the "Trade completed" sound, which stayed silent before.
- Changed the API dialog call to report an unknown dialog label instead of always reporting success.
- Changed NPCs without arms to carry held items at the head or body instead of hiding them.
- Changed the optional Easy Model Entities dependency to require version 2.4.0 or newer.
- Added a "Sound" configuration with sounds for dialogs, speech, swimming, eating and fall damage.
- Added a searchable sound selection with volume and pitch sliders to the "Sound" configuration.
- Added a "Block Vehicles" option to keep NPCs out of boats, minecarts and modded chairs.
- Added the profession selection to all skin configurations and a new built-in skin per NPC type.
- Added client settings to hide name tags behind walls and
highlightEnabledfor wand outlines. - Added an "Exists" condition operation and API access to NPC movement, actions and presets.
### 7.11.0
- Fixed #828 by no longer freezing the server on logout when NPCs follow or watch the player.
- Fixed #831 by moving routine NPC removal messages to the debug log.
- Fixed #832 by making humanoid NPCs ignore custom player models, animations and poses.
- Fixed hourly NPC backups stuttering on large worlds and retaining timestamps of removed NPCs.
- Fixed owner-login restoration duplicating, repeatedly restoring, reviving or moving unloaded NPCs.
- Fixed NPC index and file synchronization issues causing lost NPCs, crashes or false warnings.
- Fixed stale NPC data after unloading, avoided redundant writes and added repeated-unload warnings.
- Fixed the preset browser failing to list custom and world presets saved in the SNBT format.
- Fixed speech bubbles losing their text and turning translucent with Iris shaders.
- Fixed text formatting and macro parsing for translated speech bubbles and mod API texts.
- Added
minLightLevelto keep speech bubbles readable in dark surroundings.
### 7.10.0
- Fixed #829 by allowing bats and other non-walking mobs as the render entity of a Doppler NPC.
- Fixed NPCs rendered as a bat, frog or warden showing a static pose instead of their animation.
- Fixed the NPC name tag showing above the previews in the "Custom Models" configuration.
- Fixed speech bubbles being cut off by walls, doorframes and the NPC's own body.
- Fixed the previews in the "Custom Models" configuration.
- Changed the previews in the "Custom Models" configuration to stand on a common ground line.
- Changed overlapping speech bubbles to move apart and to stay visible when the NPC is off-screen.
- Changed "Navigation: Automatic" to use flying movement for NPCs rendered as a flying mob.
- Changed the render entity list to hide seats, paintings, thrown items and other non-mob entities.
- Added a "Min. hover height" slider for flying NPCs and client settings for speech bubbles.
### 7.9.0
- Fixed modded fish NPCs, like the ones of Tide 2, spinning around instead of swimming upright.
- Fixed "Navigation: Automatic" using ground movement for water NPCs and aquatic model NPCs.
- Fixed the "Random Swimming" objective never moving an NPC that uses aquatic navigation.
- Fixed a swimming NPC shaking or twitching in place instead of holding its tilt and swim depth.
- Fixed a swimming NPC turning in circles forever when it could not reach its next path point.
- Fixed an NPC that fell into water never getting out of it again.
- Fixed a following NPC searching a new path every tick while its target was unreachable.
- Fixed the "Move to" actions stopping short of a raised target or not starting while in the air.
- Fixed "Move back to Home" ignoring height differences and never returning from beyond 32 blocks.
- Fixed the "Opacity" input field being too narrow to show a value of 100.
- Fixed a damaged NPC with an Easy Model Entities model never flashing red.
- Changed modded water NPCs to swim level, vanilla water mobs keep their tilt as before.
- Changed the "Move to" actions to walk up to 48 blocks and to teleport only beyond that range.
- Changed "Move to" and "Move back to Home" to give up after three seconds without progress.
- Changed the timeout of a "Move to" action to count real ticks, it ran twice as long before.
- Changed a new "Random Swimming" objective to rank below following, fleeing and attack goals.
- Changed "Opacity" of an NPC with an Easy Model Entities model to be applied by that mod itself.
- Changed the minimum Easy Model Entities version to 2.3.0, older versions disable the integration.
- Added "Depth below surface" and "Height above floor" sliders for the swim level of an NPC.
- Added log entries for the NPC files written on a world save, with a warning above 250 ms each.
### 7.8.1
- Fixed #827 by rendering fish NPCs in water upright instead of always flopping on their side.
- Fixed #828 by keeping a damaged NPC from blocking the world save, it now falls back to defaults.
- Fixed a restored NPC picking up a random preset ID that changed with every save.
- Changed NPC data to only be written to disk when it actually changed.
### 7.8.0
- Fixed smaller text and UI issues.
- Changed an NPC that is already standing at its target position to finish the movement right away.
- Changed the "None" skin tab to "Advanced", which now holds "Disable Skin" and the texture field.
- Added a "Move to" action, which sends an NPC to a position, a player, its owner or its home.
- Added a "Move to and Wait" action, which runs the following actions only after the arrival.
- Added an arrival radius, a timeout and an optional teleport to both move actions.
- Added an "Opacity" attribute from 0 to 100, which fades body, armor and hand items together.
- Added a "Set Opacity" action, which turns an NPC into a ghost or hides it completely.
- Added the "Lantern Wraith" preset, a ghost walking a square with a short line at every corner.
- Added API access to the move actions and the opacity of an NPC.
- Added a "Resource Location" skin type, which renders any texture of a mod or a resource pack.
- Added an "Advanced" skin tab, which previews the NPC with the entered texture before applying it.
### 7.7.7
- Fixed #821 by keeping the transparency of 64x64 skins, which Fresh Moves needs for its eyes. Skins
- Fixed #818 by running trade actions for Villager and Wandering Trader NPCs as well.
- Fixed a dialog with several text variants switching its speech bubble size every second.
- Fixed the skin cache storing the processed image instead of the original download.
- Fixed the untranslated interval names, like
PER_DAY, of the "Execution Limit" condition. - Fixed the
sitanimation of Easy Model NPCs, which never used the built-in sitting pose. - Fixed the speech bubble being cut off by the head of an NPC when a player stood close to it.
- Changed speech bubbles to keep their screen size and to move down or aside when a player is close.
- Changed the speech bubble text to render 20% larger than a name tag.
- Changed a time based action set with a "Wait" action to run in order instead of picking one entry.
- Changed dialog texts to wrap later, so an existing dialog can switch to the wider screen layout.
- Changed fallback actions to skip screen actions without a player, like the regular actions do.
- Changed the minimum Easy Model Entities version to 2.1.0, older versions disable the integration.
- Added a "Wait" action, which pauses the following actions of an event for a chosen duration.
- Added the "Countdown Timekeeper" preset, a speech bubble count to ten ending in sound and sparks.
- Added scaling and rotation for Doppler NPCs behind the "Experimental Features" checkbox. Both only
- Added a "Sound" action, which plays a sound at the NPC with sound category, volume and pitch.
- Added "Every 5 Minutes" and "Every 15 Minutes" to the "Execution Limit" condition.
- Added a "Player Idle" condition, which checks how long a player has not moved.
- Added an "Immovable" attribute, which keeps an NPC in place against pushing and knockback.
- Added
/easy_npc pauseto pause a single NPC or all NPCs; the global pause ends with the server. - Added API access to the sound action, the pause state and the idle time of a player.
- Added a texture override per model slot for Easy Model NPCs over
/easy_npc render texture. - Added a "Repeat" playback mode with a count and a time limit to the "Play Animation" action.
- Added API access to animation variants, texture slots and textures of Easy Model NPCs.
### 7.6.0
- Fixed unclear mod conflict errors for duplicate entity data tracker IDs.
- Fixed third-party health bars rendering over NPC previews in configuration and dialog screens.
- Fixed Doppler and Easy Model Entities NPCs using default hitboxes instead of their model size.
- Fixed the
/easy_npccommands suggesting no NPC UUIDs at all on a server. - Fixed the pose list of the "Set Pose" action drawing over its input field.
- Fixed the untranslated "Loop", "After current" and "Action Data Type" labels of the action editor.
- Fixed the missing hint text of the "Chance" condition.
- Fixed long condition hints running out of the editor screen instead of wrapping.
- Fixed the misaligned help icons and text buttons of the "Message" action.
- Fixed changes to the "Set Pose", "Play Animation" and "Stop Animation" actions not being saveable.
- Fixed the speech bubble text sitting closer to its upper border than to its lower one.
- Changed the NPC suggestions to list the crosshair NPC first and only own NPCs without permissions.
- Changed a preset export to only store what differs from a new NPC, without position or owner.
- Changed a preset without objectives or actions to fall back to the defaults of its NPC type.
- Changed events without a player, like "On Spawn" or "On Kill", to check their conditions. An
- Changed a time based action to pick the owner as
@initiatorwhenever the owner is nearby. - Changed speech bubbles to stay visible from 5 up to 18 seconds, depending on the text length.
- Changed the "Set Pose" action to only show its input field for the "custom" pose entry.
- Added time based actions on five fixed steps, from every ~1 second up to every ~15 minutes.
- Added a "Message" action for chat, system message and speech bubble text without a command.
- Added text variants, a sender name, a recipient and translation keys to the "Message" action.
- Added the speech bubble graphic as
easy_npc:textures/gui/speech_bubble.pngfor resource packs. - Added a "Chance" condition in percent and a "Relationship" condition for owner and faction.
- Added spawn, owner login, state change, day / night, weather and the missing "On Trade" events.
- Added a base preset per NPC type under
easy_npc:api/preset/base/, usable as a parent preset. - Added the "Wandering Companion" preset, a talkative NPC built from time based messages.
- Added an action registry, an action handler, a preset validator and richer event data for mods.
- Added a tooltip with name, type and distance to every NPC suggestion of the
/easy_npccommands. - Improved the NPC suggestions, which appear without typing and tolerate a near miss of one block.
### 7.5.0
- Fixed #814 by giving every Cobblemon NPC its own animation state instead of one per species.
- Fixed #813 by letting "Move back to Home" work at any distance instead of only near its home.
- Fixed #812 by checking once per session whether a player changed their skin.
- Fixed #810 by accepting Cobblemon aspects of resource packs instead of only "shiny" and "female".
- Fixed NPCs losing their owner, home and "No Gravity" setting after a respawn or a preset import.
- Fixed objectives keeping a gone target and being switched off when their target or mod was gone.
- Fixed flying NPCs like Allay, Vex and Ghast moving on the ground instead of flying.
- Fixed dialog, button, preset, pose and texture names with duplicates or special characters.
- Fixed conditions not being editable on a dedicated server and untranslated condition texts.
- Fixed Easy Model Entities NPCs not turning their head and their model list ignoring a
/reload. - Fixed the "Legacy Easy NPC Data" warning appearing for newly created NPCs.
- Fixed missing transparency corrections for old 64x32 skins, which showed layer artifacts.
- Fixed the player skin screen freezing for a moment while a player name was looked up.
- Fixed the "Reset look at ..." objective label, which read "Reset loot at ..." in some languages.
- Fixed the Fabric game tests, which crashed on start because of the development helper mods.
- Fixed the NPC data isolation and trading persistence game tests, which never ran on Fabric.
- Fixed walking animation for Doppler NPC and 3rd party models.
- Changed the movement objectives to a fixed order: flee, follow, return home, then stroll. NPCs
- Changed datapack presets to
easy_npc/preset/, the old folder still works, but only for easy_npc. - Changed the required Easy Model Entities version to 1.7.0, floating models now hover by default.
- Removed the experimental user-defined NPCs and the unused
SERVER_SKINskin type. - Added NPC states with number, yes/no and text values, usable as condition, action and command.
- Added a "Navigation" and a "Hover height" setting to switch any NPC between ground and flying.
- Added parent presets, presets from other mods, a preset visibility and the "Forge Keeper" preset.
- Added custom conditions, events, an NPC identifier and more objective options for other mods.
- Added "On Far Distance" at 32 blocks and an option to spawn an NPC again when its owner logs in.
- Improved flying navigation and third party support with an API for presets and own objectives.
### 7.4.0
- Fixed #807 by no longer pulling every same-type NPC within 32 blocks into a "Defend Self" fight.
- Fixed #805 by evaluating all visibility settings together instead of stopping at the first one.
- Fixed #804 by keeping the custom name on Doppler NPCs for name based textures and the name tag.
- Fixed #803 by adjusting assets to match typical Minecraft style instead of generic UI style.
- Fixed the day and night detection, which counted sunrise as night and sunset as day.
- Fixed the visibility in the Nether and the End, which used the Overworld time.
- Fixed the time and game mode visibility checkboxes appearing in a random order.
- Fixed game tests only being able to fail on their first assertion, which hid later failures.
- Fixed the "Saddled" horse skin variants, which never showed a saddle.
- Changed "Visible to Owner" and "Visible to Team" to also follow day, night and game mode.
- Changed Evoker, Illusioner and Vindicator variants without "Crossed Arms" to keep their arms down.
- Added a "Defend Faction" objective that attacks whoever hurt a nearby faction member or player.
- Added a system message when faction members fight each other and the faction stays out of it.
- Added a head equipment slot for Illagers so their captain banner can be removed or swapped.
- Added a day and night preview to the display configuration screen.
- Added unit and game tests for the visibility attributes and the faction defense.
- Improved the visibility check performance by reading the display attributes only once per check.
- Improved display attributes from older versions by completing them with their defaults.
- Improved the attack objective screen by disabling "Protect Owner" and "Defend Faction" when unset.
### 7.3.0
- Improved skin variants by carrying their data as typed fields instead of parsing variant names.
- Centralized the Cobblemon mod id and default model on shared constants.
- Reduced duplicated enum code with a shared
EnumUtilshelper forget(String)lookups. - Optimized villager profession and type lookups to use direct registry keys instead of scans.
- Optimized enum name lookups by caching tag names, ids and keys once at construction.
- Added unit and game tests for skin variants, villager resolution and the enum helper.
### 7.2.0
- Fixed #801 by using combination for NPC, Dialog and Action UUIDs to avoid collisions for action
### 7.1.1
- Fixed #800 by lazy loading entity types.
- Fixed #799 by fixing edge cases and adding additional documentation and better log messages.
- Fixed #798 by considering console, commands and command blocks as trusted command sources.
- Fixed a critical single-player / LAN issue where client and server NPCs shared the same registry.
- Fixed a memory leak in the configuration menu handling and added timeout and disconnect cleanup.
- Fixed duplicate downloads when several NPCs request the same skin at the same time.
- Fixed skin lookups failing after a error so a slow server no longer freezes the game.
- Fixed the URL skin screen freezing the game while checking a remote image; the check now runs in
- Added a new World Spawner block that limits an NPC preset across the whole world (all dimensions),
- Hardened remote skin downloads with a strict size limit and safe redirect handling to prevent
blockPrivateAddresses setting.- Improved server performance by only sending entity and player load events to NPCs that actually
### 7.0.0
- Fixed #791 by adding Wandering Trader NPC type.
- Fixed #788 by extending the AI safeguards to Epic Fight and raw NPC variants (Piglin, Villager,
- Fixed #787, #531, #237 and #184 by adding a faction system with
/easy_npc factioncommands,
- Fixed #787, #771 and #572 by adding a new
targetobjectives tab to attack hostile factions or
- Fixed #786 by adding gender and shiny model variants for Cobblemon NPCs, searchable via
female
shiny in the model selection.- Fixed faction combat between invulnerable NPCs by adding the new
Attackable by Factionscombat
- Fixed Cobblemon model selection previews for oversized species by scaling with Cobblemon's own
- Fixed faction management edge cases by validating faction names, sorting faction lists and
- Fixed custom skin reloads by loading and clearing texture caches per skin model instead of always
- Improved the
Attackable by Players/Monsters/Factionscombat attributes to work independently of
Invulnerable, each opening a targeted hole for its own attacker group.- Improved preset command and network handling by splitting the large handlers into smaller focused
- Added Easy Model Entities Support.
- Added faction manager and faction editor screens to create, color and delete factions and manage
FACTION_MANAGEMENT security feature.- Added new
Miscattributes tab as home for the NPC faction assignment. - Added reusable warning and help icon components for inline hints with tooltips.
- Added additional unit and game tests for factions, target objectives and Cobblemon model variants.
### 6.25.0
- Fixed #782, #636, #622 by preserving data components during validations.
- Fixed #780 by caching remote texture downloads and reducing duplicate registrations.
- Fixed #767 by clamping attribute sliders against extreme values from other mods.
- Fixed #754 by adding custom data item matching for NPCs with actions and conditions.
- Fixed texture manager running in the wrong thread may cause crashes and deadlocks in >= 1.21.x.
- Fixed empty UUID handling for action conditions.
- Fixed execution limit reset for actions.
- Added texture registration queue to avoid multiple simultaneous downloads in the same tick.
- Added NPC coin, key and red token as consumable items for NPCs with actions and conditions.
- Added
Welcome Coin Traderas example NPC preset with custom coin, key and red token item data. - Added attribute safeguards against extreme values from other mods.
- Increased fallback max health value from 1024 to 4096 for high-health NPCs.
- Improved texture manager by reducing duplicate texture checks and registrations.
### 6.24.0
- Fixed #459, #775 by adding an option to block interactions with invisible NPCs.
- Fixed #774 startup crash related to optional Epic Fight and Cobblemon entity type maps.
- Fixed #773 by checking timed trade resets during base ticks and before opening trade screens.
- Fixed trade reset timing by increasing internal tickers correctly.
- Added time of day and weather conditions for #459.
- Added additional unit and game tests for trade resets, ticker handling and entity attributes.
- Added
Skywatch Scoutas example NPC preset with time of day and weather conditions.
### 6.23.0
- Fixed #772 by adjusting texture retries with 403 and 404 errors and lowering logging.
- Fixed #770 item rendering for Epic Fight NPCs (Evoker, Pillager, Vindicator and humanoid skins).
- Fixed #769 door loops with NPCs not reliably opening or closing doors.
- Fixed #760 by adding a dialog option and config setting (buttonConditionMode: LOCK or HIDE) to
- Fixed #709 by adding color picker popup for names with 32 colors and/or a manual RGB/hex value.
- Fixed NPC name color being reset when renaming without a specified color by preserving the
- Improved the door movement attributes so "Pass Door" is automatically enabled while "Open Door"
### 6.22.0
- Fixed #766 by passing the full server player context to command execution for better compatibility
- Fixed #764 by adding entity health, npc health conditions and NPC preset
Grukk, the Sparring Post as example for using these conditions.- Fixed #763 by making sure dialog button execution limits are now recorded.
- Fixed #758 by providing a example NPC preset named
One Wish Companion. - Fixed crashes related to 3rd party villager AI reading non-registered brain memories on Easy NPC
- Fixed Dialog buttons are not locked for server-side data as preparation for #760 and #644.
- Fixed #628 by adding conditional dialog opening support / command for better control over when
- Added brain AI for Piglin and Piglin Brute NPCs and registered the full vanilla brain memory set.
- Added additional guns to the gun tag for #757.
- Added a new "Open Dialog (Conditional)" action that opens a named dialog only if its conditions
- Added new entity health and npc health conditions for actions, dialogs and dialogs buttons.
- Added Piglin, Piglin Brute and Zombified Piglin NPCs invulnerable, for consistency with other
- Added a new "Knockback Immunity" combat attribute that prevents the NPC from being knocked back by
- Added a new "Explosion Immunity" combat attribute that makes the NPC immune to explosion damage
- Moved the "Projectile Collision" attribute to the Combat attribute screen, where it fits better
### 6.21.0
- Fixed item attachment for Illagers in crossed-arms pose.
- Fixed broken illager crossbow attack goal.
- Fixed crashes related to 3rd party items which are not renderable as hand items #756.
- Fixed crashes related to 3rd party mixins trying to access non-existing model parts #756.
- Fixed log.info spam message by reducing log verbosity and adding additional checks for custom
- Improved EasyNPCModelManager performance.
- Refactored NPC renderers to remove default hand item layer.
### 6.20.0
- Fixed crashes related to 3rd mods trying to access non-existing NPCs goals.
### 6.19.0
Note: This update adjusted the dialog background images by 10x6 pixels, which may require users to
adjust their custom dialog backgrounds if they are using custom ones.
- Fixed #752, #130 by adding dialog button condition support to allow to disable buttons.
- Fixed #683, #215 by adding typewriter effect support for dialog text.
- Fixed #690, #309 by allowing conditions for dialog, dialog buttons and interactions.
- Fixed smaller UI issues with dialog screen layout and background.
- Refactored dialog background images by 10x6 pixels on each side.
- Refactored dialog screen layout to better fit the new background size and improve appearance.
- Added typewriter effect and client configuration for dialog text.
- Added condition symbols to indicate the condition status for dialog, buttons and interactions.
- Added amount field for item conditions to allow checking for specific amounts of items.
- Added
Threshold Wardenas example NPC preset with various conditions and actions. - Added smaller bug fixes and optimizations related to dialog conditions and button states.
### 6.18.0
Note: This update changes the internal data format for conditions and actions, which may reset /
remove legacy existing execution-limit entries without stored IDs.
- Fixed #745 by adding conditions for actions to allow more complex and dynamic behavior.
- Fixed #652 by adding dialog button tooltip for longer texts.
- Fixed #687 by adding command value tooltip to show the full value.
- Added Experience Level conditions.
- Added Game-mode conditions.
- Added has item in inventory condition.
- Added has item in hand condition with (main hand and off-hand) support.
- Added player health condition.
- Added player tag condition.
- Added player team condition.
- Added Goldmere example NPC preset with various conditions and actions.
- Added negative condition support to allow negating conditions for more complex logic.
- Removed parameter pseudo IDs for
ActionDataEntryand replaced them with random UUIDs. - Refactored condition system to allow more condition types.
### 6.17.0
- Fixed #738 by adding additional tooltips for "Execute as player"
- Fixed to detailed logs by reducing log.info messages during startup and in-game.
- Added additional unit and game-tests.
### 6.16.0
- Fixed #732 by providing option to disable ESC key and close button for dialogs.
- Fixed #723 by avoid auto-close in specific cases like trading screens.
- Added general dialog configuration options to allow users to customize dialog behavior.
- Added avatar scaling and position offset options for dialogs.
- Added missing translation keys.
### 6.15.0 (Trades, Player Heads, Epic Fight and QOL updates)
- Fixed #731 by resyncing species data, if species list is empty on the client.
- Fixed #730 by improving Epic Fight integration and enabled experimental features.
- Fixed #729 by making sure trade uses are stored correctly.
- Fixed #728 by adding custom head support for player heads.
- Fixed #689 by showing remaining trade uses and allow resetting manually and automatically.
- Fixed #218 and #132 with new trade configuration screen and better support for custom trades.
- Fixed trade specific edge by switching between basic and normal/advanced trading mode.
- Fixed dialog button text is truncated with tooltip showing the full text.
- Fixed Cobblemon animation issues by syncing animation state with Cobblemon Animation System.
- Added per trade specific actions to allow users triggering actions after buys.
- Added trade reset button to reset all trades easily.
- Added trade usage information to trade configuration screen.
- Added experimental feature state to allow users to manually enable experimental features.
- Added Griselda Grindstone as example trader with actions.
- Cleanup test files.
### 6.14.0
- Fixed #727 by making sure changes are synced to the client when changing values.
- Fixed #726 by adding additional allow lists for specific commands.
- Fixed #686, #389, #304, #211 by adding basic Cobblemon support with Cobblemon NPC.
- Fixed dialog misalignment and navigation issues by adjusting dialog sprites and screens.
- Fixed x and z root rotation by correcting rotation logic and pivot calculations.
- Added basic Cobblemon support with custom NPC type and model for testing.
### 6.13.0 (Security and Permissions Updates)
Notes: This update includes better security checks and permissions for multiplayer environments. It
allows to execute server commands which can be potentially dangerous if used with malicious intent.
- The update splits the model root data and logic from the rest of the model part data and logic,
- Fixed #725 by separating model root data and logic from the rest of the model part data and logic.
- Fixed #722 by supporting .sbnt files as local presets.
- Fixed #675 by adding dedicated assets for dialog and config screen backgrounds.
- Fixed #605, #532, #529 with new security checks and permissions system.
- Fixed #469, #311 by adding experimental api documentation and examples for custom model support.
- Fixed double rendering of config screen background by removing redundant background rendering.
- Fixed Ghast and Slime hitbox and name tag position issues by adjusting bounding box.
- ⚠️ Added security checks to prevent potential exploits and allow safe usage in multiplayer
- Replaced dynamic dialog screen background with a static one for better performance, customization
- Replaced dynamic config screen background with a static one for better performance.
- Refactored config-ui specific components and removed them from the core mod.
- Removed duplicated sprite sheets.
- Prepare permission system for possible Luck Perms integration in the future like #712.
- General code cleanup and optimizations related to config screen rendering and assets.
### 6.12.0
- Fixed #714 by adding additional checks for custom model part list based on vanilla models.
- Fixed #713 by reducing log verbosity with downgraded per-NPC INFO messages to DEBUG and
- Fixed #711 by reduced oversized startup/config log output.
- Fixed NBT validation guard to prevent unnecessary buffer allocations in production.
- Added model part name constants to EasyNPCModelManager for consistent usage across mixins.
- Improved RenderEntityTypeSupportConfig by enhancing filter logic and optimizing data structures
- Removed verbose debug logs that dump large data structures.
### 6.11.1
- Fixed #710 by improving backward-compatible parsing for recoverable trade data.
### 6.11.0
- Fixed #703 rendering issue with new custom layer system and hand renderings.
- Fixed #701 by adding additional safeguards and logging for invalid trading offers.
- Fixed smart animation not working properly with modified head position.
- Fixed head tracking by moving player detection back to server side-only.
- Fixed CustomLookAtPlayerGoal to better handle edge cases and reduce jitter.
- Fixed issue with Doppler NPCs keeping their hand inventory.
- Improved PoseManager logging message.
- Updated logo with a new design.
### 6.10.0
- Fixed #698 by adding try and catch for 3rd party entity creation.
- Fixed #695 by clearing model part rotations/positions when switching to a
DEFAULTvanilla pose. - Fixed #695 by applying lock rotation and pose animation only when the NPC is idle.
- Fixed #695 by correcting root rotation pivot to use actual bounding box height instead of 0.5f.
- Fixed multiple objective registration issues including inverted
isTargetedPlayercheck, wrong
targets.
- Fixed goal reference being retained after objective is unregistered.
- Removed auto-lock of ROOT rotation when loading poses; root lock is now user-controlled.
- Added lock rotation checkbox to the advanced and custom pose configuration screens.
- Added model-specific pose key filtering in
ConfigurationMenuHandlerfor the default pose screen. - Added unit tests for
CustomPosition,CustomRotation,CustomScale,ModelPose,
ModelAnimationBehavior and ModelAnimationData.- Added
NPCDataIsolationTestHelperand game tests for Fabric and Forge. - Increased max head yaw range from 60° to 65°.
### 6.9.0
- Fixed #692, #666 by adding caching and safeguards to prevent redundant retriggering of NPC entity
- Fixed #651, #617 by adding basic custom poses for all supported NPC types.
- Fixed #597 by adding additional Flee goals for fleeing from players, villagers, monsters, ...
- Fixed pose loading to read directly from mod resources instead of copying files to disk.
- Fixed duplicate
saveNPCcalls on entity join by checking existing registry entry first. - Added
despawnandspawncommands to remove and re-spawn NPCs by UUID with configurable removal
- Added
ModelPoseAPIandEasyNPCEntityHandlerpublic API classes for controlling NPC poses and
- Added pose data files for all supported NPC types.
- Added lock rotation checkbox to the basic pose configuration screen.
- Added
MoveToPositionGoalto move an NPC to a position before executing a callback action. - Added
EasyNPCLookControlandEasyNPCBodyRotationControlto respect locked root rotation. - Added synced owner change and dimension change to the NPC entity data index.
- Added EasyNPCItemAttachmentLayer into various entity renderers.
- Added dedicated
Flee Objectiveconfiguration tab with objectives for fleeing creepers, monsters,
- Added
FOLLOW_ITEMobjective to the follow objectives tab to make NPCs follow item entities by
minecraft:apple).- Added
LookAtEntityByUUIDGoaland enabled the look-at-entity-by-UUID and look-at-owner objectives
- Added
persistentflag toSynchedDataIndexso that transient indices (e.g. crossbow charge,
- Added configurable
customParticlesEnabledflag toSlimeBasefor API consumers. - Added
SoundType.PETand mappedCAT_PURRto the cat NPC for tamed ambient sound variety. - Reduced log verbosity for periodic NPC save operations from INFO to DEBUG.
### 6.8.3
- Fixed #680 by enforcing version miss-match by upgrading network protocol version.
- Fixed #679 by resetting position, rotation and size for name tag.
- Fixed #665 by adding multi state slide for root rotations.
- Fixed #664 by adding option to disable following mouse cursor for easier posing.
- Fixed #663 by improve support for X and Z root rotations.
- Fixed #661 by adding quick rotation with NPC wand and sneaking to the NPC to rotate the root to
- Fixed move tool is wrongly triggering interactions by adding check for move tool in interaction
- Fixed Preset Item is wrongly triggering interactions by adding check for preset item in
- Fixed Slime and Ghast hitbox and name tag position issues by adjusting bounding box and eye height
- Fixed Slime and Ghast GUI position by adjusting offset values.
### 6.8.2
- Fixed #677 by extending
SafeMerchantDatawith notifyTrade to avoid crashes. - Added progression data support for leveling up NPCs based on player interactions and actions.
- Added global NPC tracking system for better management and debugging of NPCs across the world.
- Added
OriginalModelConfig.withVariantTexture()option to allow using variant textures with the
### 6.8.1
- Fixed #676 by using existing preset helper method instead of custom one.
### 6.8.0 (Adding API support)
- Fixed #667 by adding warning messages and additional checks for invalid network packets.
- Fixed Horse spawn eggs model.
- Fixed pose support for allay, chicken, creeper, fox, ghast, horse, illager, iron golem, slime and
- Added NPC base classes for better API support.
- Added NPC raw classes for advanced API support.
- Added Slim and Ghast NPC types.
- Added Custom Model API for easier integration with other mods and custom models.
- Refactored internal data handling and registration for better maintainability and future
### 6.7.1
- Fixed #657 and #656 by adding additional client side checks for vanilla bug.
### 6.7.0
- Fixed #650 by implementing Wolf Leg Animations in setupAnim method.
- Fixed #648 by fixing canBeHitByProjectiles translation.
- Fixed #645 by adding
allowBypassInvulnerabilityconfig option to allow/deny bypassing
- Fixed delete button showing label even with small width.
- Fixed up and down buttons not positioned correctly in some cases.
- Fixed name tag showing up for dialog and configuration UI.
- Fixed distance action issue were multiple actions are not properly triggered.
- Fixed issues with NPC presets.
- Fixed Cat NPC and Wolf NPC owner data not syncing properly.
- Added preset browser for easier selection of common NPC presets.
- Added preset .snbt (text) export and import functionality for sharing NPC presets.
- Refactored existing NPC presets to use new .snbt format.
- Refactored spawner system to use new preset format for better maintainability and future
### 6.6.2
- Fixed #643 by rework scaling system.
- Fixed scaling not properly updating hitbox and nametag position after restart / reload.
- Added MID and MOUSE_OVER name tag visibility modes for finer control over NPC name display.
- Added team-based name tag visibility support respecting vanilla Team.
### 6.6.1
- Fixed #638 by refactored internal data handling for display attributes.
### 6.6.0
- Fixed #634 by implementing asynchronous texture loading with dedicated thread pool.
- Fixed texture loading blocking render thread causing game freezes.
- Fixed race conditions in texture reload protection using atomic operations.
- Fixed resource leaks in HTTP connections during remote texture downloads.
- Fixed URL validation spam allowing multiple simultaneous downloads of the same texture.
- Fixed exception handling for remote image validation preventing crashes on invalid URLs.
- Fixed
defineId called for:warning messages during NPC loading. - Refactored texture loading architecture with multi-level defense and rate limiting.
- Refactored entity data registration logic for better maintainability.
- Converted data classes to modern Java records for better immutability and thread-safety.
- Added thread-safe session server spam protection with ConcurrentHashMap.
- Added comprehensive error recovery with automatic cooldown reset on failures.
- Improved texture loading with 2-thread pool and 500ms rate limiting.
- Improved exception handling with specific catch blocks for IIOException and FileNotFoundException.
### 6.5.2
- Fixed Villager profession and job skin issue.
- Improved GitHub workflows by adding cache for gradle dependencies.
- Improved Gradle build time and cleanup tasks.
### 6.5.1
- Fixed #632 by implementing ON_KILL action type and event.
- Fixed #629 by improving texture handling performance, caching, and memory usage.
- Fixed kill command is not working on NPCs.
- Fixed texture reload protection preventing cache reload after eviction.
- Fixed WebP validation bug in remote image validator (missing return statement).
- Refactored texture handling logic for better maintainability and future improvements.
- Added time-based reload protection (60 seconds) to replace permanent blocking mechanism.
- Added additional unit tests for texture handling.
- Improved gradle build tasks.
### 6.5.0
- ⚠️ Removed jar-in-jar bundle approach for better mod compatibility and api capabilities.
- Fixed #627 scissor implementation for better compatibility with other mods.
- Fixed #625 lively animation issues when using rotated or moved model parts.
- Fixed default animation are canceled when using scaled model parts.
- Added better pose animation control with smart, default und none options.
### 6.4.1
- Fixed #626 screen switching logic for different NPC UUIDs, thanks to
Spawnbladefor the detailed
### 6.4.0
- Fixed #626 by improving dialog data validation and error handling.
- Fixed #623 by refactoring render data and render handling.
- Fixed #622 by making sure custom data are properly saved and loaded.
- Fixed open dialog action type to allow opening dialogs from other NPCs.
- Fixed hashing issues by adding missing equals and hashCode methods for ConditionDataSet and
- Added custom data test item for #622 and easier testing of custom data.
- Improved records and fixed potential issues with missing data.
### 6.3.0
- Refactored config ui specific components and removed them from the core mod.
- Fixed dialog data by filtering dialog data before sending to the client.
- Fixed dialog editor layout issues and improved usability.
- Fixed missing default values for some dialog data fields.
- Added dialog priority support to control the order of dialog execution.
- Added condition support for dialog and scoreboard actions.
- Added frequency support for dialog to limit how often an dialog can be shown.
- Added new NPC preset to for scoreboard and condition support.
- Improved dialog button data format by removing redundant fields.
### 6.2.0
- Fixed string injection within dialogs.
- Fixed missing translation for action types.
- Added scoreboard action type to increase, decrease, set scoreboard values.
- Added
@score(...)NPC macro to display scoreboard values in the dialog. - Added additional unit tests.
- Improved spin button with indicators and better usability.
### 6.1.2
- Fixed container and menu sync issues with missing close container packets.
- Fixed close button not working in some cases.
- Fixed jumping mouse cursor between screen transitions.
- Fixed translation files and removed duplicate and deprecated entries.
- Moved Easy NPC wand to existing core item tab instead of creating a new one.
- Added cat pose support for different model parts (except tail).
- Improved EasyNPCWand glowing effect performance by disabling it when not needed.
- Improved custom entity detection by excluding non-living entities like displays, makers, throwns
- Improved cat variant handling.
### 6.1.1
- Fixed #612 by re-validating entity types.
- Fixed #610 by force sync of hat and head layers for specific models.
- Fixed orc textures.
- Improved custom model support and performance, by moving related logic into to client side only.
- Improved caching of player to UUID mappings for player skins.
- Limited change model commands and logic to Doppler NPCs only.
### 6.1.0 ✨
This is a major release. Please back up your worlds and NPC data before updating. This version
contains many improvements, optimizations, and internal changes that are **not fully compatible**
with earlier releases.
⚠️ Breaking changes
- Existing NPCs and their configuration data from versions before 6.1.0 may not load correctly or
- Internal data formats and some behaviors have been refactored to support new use-cases.
🧩 New modular structure
Easy NPC is now split into three separate mods:
- Easy NPC** – Bundle that includes both Core and Configuration UI for a plug‑and‑play experience.
- Easy NPC: Core** – Lightweight runtime and logic for NPCs, with minimal dependencies. Intended
- Easy NPC: Configuration UI** – Standalone configuration interface for creating and editing NPCs.
🎯 Why this change?
- Allows servers and modpacks to ship only the **Core** mod on the server side for a leaner setup.
- Reduces memory usage and load times when the UI is not required everywhere.
- Makes development and testing faster by separating UI and core logic.
[history]: https://github.com/MarkusBordihn/BOs-Easy-NPC/commits/
[upgrade_guide]: https://github.com/MarkusBordihn/BOs-Easy-NPC/wiki/Upgrading
## Note
This change log includes the summarized changes. For the full changelog, please go to
the [GitHub History][history] instead.
Note: Please always back up your world / NPCs before updating to a new version!
Check the [upgrade guide][upgrade_guide] for more information.
### 7.15.0
- Fixed #838 by keeping preset imports silent when run through
/executeor command blocks. - Fixed #380 by applying the NPC limit to the default spawner as well.
- Fixed #849 by allowing resource pack sounds in the sound configuration.
- Fixed #349 by no longer spawning NPCs left-handed at random.
- Fixed #851 by locking dialog buttons per dialog, not across dialogs with the same label.
- Fixed deleted or duplicated NPCs returning, memory leaks and several owner and UI issues.
- Fixed the Epic Fight Wither Skeleton NPC missing its Epic Fight mob patch.
- Changed requirements: same mod version on client and server, Easy Model Entities 2.5.0+.
- Changed backups of all worlds and killed NPC data to expire after 30 days, see
storage.cfg. - Added "Jump", "Assist Owner" and "Follow Nearest Player" to fix #845, fix #310, fix #761.
- Added an NPC inventory with item pickup and death drops to fix #111, fix #197, fix #543, fix #670.
- Added "Sit on Shoulder", a boss bar and
/easy_npc debug core loglevelto fix #577, fix #219. - Added the "Hold" animation mode, a "Bank Teller" preset and new API methods for addons.
### 7.14.0
- Fixed #846 by keeping custom poses for players who start seeing the NPC later.
- Fixed attribute and trading settings missing for players who start seeing the NPC later.
- Fixed changed max uses, XP and trading type not shown in the trading screens until reload.
- Fixed
/easy_npc sound setchanges not reaching players until the NPC was reloaded. - Added game tests that check NPC poses and settings after respawns and for new players.
### 7.13.0
- Fixed color and formatting tags in dialog button names showing as plain text.
- Fixed the button preview in the editor showing lowercase names as a raw translation key.
- Fixed the "Move EasyNPC" item not working for NPC owners outside of creative mode.
- Fixed
/easy_npc owner setreporting success even when the owner could not be changed. - Fixed the game crashing when the URL or player skin screen showed a skin download error.
- Fixed the preset browser search showing no results after scrolling down the list.
- Changed the network protocol version, so client and server must run the same mod version.
- Added
@initiator,@npcand@score()support to dialog button names to fix #841. - Added automatic client tests with the Client Runtime Interface Toolkit.
- Larger core refactoring and code cleanup.
### 7.12.2
- Fixed the Fairy hitbox being far too small, so its name tag and speech bubble sat in its body.
- Fixed scaled NPCs keeping their old hitbox and eye level, so hits, clicks and looking missed.
- Fixed oversized names, lists and NPC data in network packets being read without any limit.
- Fixed invalid NPC positions, scales, attributes, names and durations from being applied.
- Changed Fairy NPCs to take up the space of their model, so they collide and can be clicked.
- Changed Skeleton, Stray and Bogged NPCs to the vanilla hitbox height, they were slightly short.
- Changed the network protocol version, so client and server must run the same mod version.
### 7.12.1
- Fixed #836 by always showing "Restore", including datapack presets, with a reason tooltip.
- Fixed preset import and export messages missing, wrong or not warning about replaced NPCs.
- Fixed the preset browser reloading on each keystroke, leaking NPCs and clearing the selection.
- Fixed the preset list sorting, filter order and layout clipping options in small windows.
- Fixed
/easy_npc preset import datawithout a position importing it as a default preset. - Fixed spawn rate limit leaks, unstable preset IDs and "Spawn New" stacking NPCs on one spot.
- Changed "Restore" to refuse instead of spawning a copy when it is not permitted.
- Added sorting, a match count, reload, auto-close, the NPC ID and tooltips for presets and skins.
- Added
matching <pattern>batch imports with limits, a confirmation and a clickable position.
### 7.12.0
- Fixed #833 by showing Easy NPC Wand outlines only to the wand holder, owner and admins.
- Fixed #834 by adding "Set Home Here" and "Reset Home" buttons to the position configuration.
- Fixed #835 by keeping the NPC ID and position in exported presets, so imports restore the same
- Fixed preset imports and spawn eggs losing the owner's list entry and owner objectives.
- Fixed NPCs restored from an automatic backup losing their owner and becoming ownerless.
- Fixed selection lists showing only their first six entries and hiding the rest.
- Changed importing a preset to update the original NPC at its stored position instead of adding a
- Changed completed trades to play the "Trade completed" sound, which stayed silent before.
- Changed the API dialog call to report an unknown dialog label instead of always reporting success.
- Changed NPCs without arms to carry held items at the head or body instead of hiding them.
- Changed the optional Easy Model Entities dependency to require version 2.4.0 or newer.
- Added a "Sound" configuration with sounds for dialogs, speech, swimming, eating and fall damage.
- Added a searchable sound selection with volume and pitch sliders to the "Sound" configuration.
- Added a "Block Vehicles" option to keep NPCs out of boats, minecarts and modded chairs.
- Added the profession selection to all skin configurations and a new built-in skin per NPC type.
- Added client settings to hide name tags behind walls and
highlightEnabledfor wand outlines. - Added an "Exists" condition operation and API access to NPC movement, actions and presets.
### 7.11.0
- Fixed #828 by no longer freezing the server on logout when NPCs follow or watch the player.
- Fixed #831 by moving routine NPC removal messages to the debug log.
- Fixed #832 by making humanoid NPCs ignore custom player models, animations and poses.
- Fixed hourly NPC backups stuttering on large worlds and retaining timestamps of removed NPCs.
- Fixed owner-login restoration duplicating, repeatedly restoring, reviving or moving unloaded NPCs.
- Fixed NPC index and file synchronization issues causing lost NPCs, crashes or false warnings.
- Fixed stale NPC data after unloading, avoided redundant writes and added repeated-unload warnings.
- Fixed the preset browser failing to list custom and world presets saved in the SNBT format.
- Fixed speech bubbles losing their text and turning translucent with Iris shaders.
- Fixed text formatting and macro parsing for translated speech bubbles and mod API texts.
- Added
minLightLevelto keep speech bubbles readable in dark surroundings.
### 7.10.0
- Fixed #829 by allowing bats and other non-walking mobs as the render entity of a Doppler NPC.
- Fixed NPCs rendered as a bat, frog or warden showing a static pose instead of their animation.
- Fixed the NPC name tag showing above the previews in the "Custom Models" configuration.
- Fixed speech bubbles being cut off by walls, doorframes and the NPC's own body.
- Fixed the previews in the "Custom Models" configuration.
- Changed the previews in the "Custom Models" configuration to stand on a common ground line.
- Changed overlapping speech bubbles to move apart and to stay visible when the NPC is off-screen.
- Changed "Navigation: Automatic" to use flying movement for NPCs rendered as a flying mob.
- Changed the render entity list to hide seats, paintings, thrown items and other non-mob entities.
- Added a "Min. hover height" slider for flying NPCs and client settings for speech bubbles.
### 7.9.0
- Fixed modded fish NPCs, like the ones of Tide 2, spinning around instead of swimming upright.
- Fixed "Navigation: Automatic" using ground movement for water NPCs and aquatic model NPCs.
- Fixed the "Random Swimming" objective never moving an NPC that uses aquatic navigation.
- Fixed a swimming NPC shaking or twitching in place instead of holding its tilt and swim depth.
- Fixed a swimming NPC turning in circles forever when it could not reach its next path point.
- Fixed an NPC that fell into water never getting out of it again.
- Fixed a following NPC searching a new path every tick while its target was unreachable.
- Fixed the "Move to" actions stopping short of a raised target or not starting while in the air.
- Fixed "Move back to Home" ignoring height differences and never returning from beyond 32 blocks.
- Fixed the "Opacity" input field being too narrow to show a value of 100.
- Fixed a damaged NPC with an Easy Model Entities model never flashing red.
- Changed modded water NPCs to swim level, vanilla water mobs keep their tilt as before.
- Changed the "Move to" actions to walk up to 48 blocks and to teleport only beyond that range.
- Changed "Move to" and "Move back to Home" to give up after three seconds without progress.
- Changed the timeout of a "Move to" action to count real ticks, it ran twice as long before.
- Changed a new "Random Swimming" objective to rank below following, fleeing and attack goals.
- Changed "Opacity" of an NPC with an Easy Model Entities model to be applied by that mod itself.
- Changed the minimum Easy Model Entities version to 2.3.0, older versions disable the integration.
- Added "Depth below surface" and "Height above floor" sliders for the swim level of an NPC.
- Added log entries for the NPC files written on a world save, with a warning above 250 ms each.
### 7.8.1
- Fixed #827 by rendering fish NPCs in water upright instead of always flopping on their side.
- Fixed #828 by keeping a damaged NPC from blocking the world save, it now falls back to defaults.
- Fixed a restored NPC picking up a random preset ID that changed with every save.
- Changed NPC data to only be written to disk when it actually changed.
### 7.8.0
- Fixed smaller text and UI issues.
- Changed an NPC that is already standing at its target position to finish the movement right away.
- Changed the "None" skin tab to "Advanced", which now holds "Disable Skin" and the texture field.
- Added a "Move to" action, which sends an NPC to a position, a player, its owner or its home.
- Added a "Move to and Wait" action, which runs the following actions only after the arrival.
- Added an arrival radius, a timeout and an optional teleport to both move actions.
- Added an "Opacity" attribute from 0 to 100, which fades body, armor and hand items together.
- Added a "Set Opacity" action, which turns an NPC into a ghost or hides it completely.
- Added the "Lantern Wraith" preset, a ghost walking a square with a short line at every corner.
- Added API access to the move actions and the opacity of an NPC.
- Added a "Resource Location" skin type, which renders any texture of a mod or a resource pack.
- Added an "Advanced" skin tab, which previews the NPC with the entered texture before applying it.
### 7.7.7
- Fixed #821 by keeping the transparency of 64x64 skins, which Fresh Moves needs for its eyes. Skins
- Fixed #818 by running trade actions for Villager and Wandering Trader NPCs as well.
- Fixed a dialog with several text variants switching its speech bubble size every second.
- Fixed the skin cache storing the processed image instead of the original download.
- Fixed the untranslated interval names, like
PER_DAY, of the "Execution Limit" condition. - Fixed the
sitanimation of Easy Model NPCs, which never used the built-in sitting pose. - Fixed the speech bubble being cut off by the head of an NPC when a player stood close to it.
- Changed speech bubbles to keep their screen size and to move down or aside when a player is close.
- Changed the speech bubble text to render 20% larger than a name tag.
- Changed a time based action set with a "Wait" action to run in order instead of picking one entry.
- Changed dialog texts to wrap later, so an existing dialog can switch to the wider screen layout.
- Changed fallback actions to skip screen actions without a player, like the regular actions do.
- Changed the minimum Easy Model Entities version to 2.1.0, older versions disable the integration.
- Added a "Wait" action, which pauses the following actions of an event for a chosen duration.
- Added the "Countdown Timekeeper" preset, a speech bubble count to ten ending in sound and sparks.
- Added scaling and rotation for Doppler NPCs behind the "Experimental Features" checkbox. Both only
- Added a "Sound" action, which plays a sound at the NPC with sound category, volume and pitch.
- Added "Every 5 Minutes" and "Every 15 Minutes" to the "Execution Limit" condition.
- Added a "Player Idle" condition, which checks how long a player has not moved.
- Added an "Immovable" attribute, which keeps an NPC in place against pushing and knockback.
- Added
/easy_npc pauseto pause a single NPC or all NPCs; the global pause ends with the server. - Added API access to the sound action, the pause state and the idle time of a player.
- Added a texture override per model slot for Easy Model NPCs over
/easy_npc render texture. - Added a "Repeat" playback mode with a count and a time limit to the "Play Animation" action.
- Added API access to animation variants, texture slots and textures of Easy Model NPCs.
### 7.6.0
- Fixed unclear mod conflict errors for duplicate entity data tracker IDs.
- Fixed third-party health bars rendering over NPC previews in configuration and dialog screens.
- Fixed Doppler and Easy Model Entities NPCs using default hitboxes instead of their model size.
- Fixed the
/easy_npccommands suggesting no NPC UUIDs at all on a server. - Fixed the pose list of the "Set Pose" action drawing over its input field.
- Fixed the untranslated "Loop", "After current" and "Action Data Type" labels of the action editor.
- Fixed the missing hint text of the "Chance" condition.
- Fixed long condition hints running out of the editor screen instead of wrapping.
- Fixed the misaligned help icons and text buttons of the "Message" action.
- Fixed changes to the "Set Pose", "Play Animation" and "Stop Animation" actions not being saveable.
- Fixed the speech bubble text sitting closer to its upper border than to its lower one.
- Changed the NPC suggestions to list the crosshair NPC first and only own NPCs without permissions.
- Changed a preset export to only store what differs from a new NPC, without position or owner.
- Changed a preset without objectives or actions to fall back to the defaults of its NPC type.
- Changed events without a player, like "On Spawn" or "On Kill", to check their conditions. An
- Changed a time based action to pick the owner as
@initiatorwhenever the owner is nearby. - Changed speech bubbles to stay visible from 5 up to 18 seconds, depending on the text length.
- Changed the "Set Pose" action to only show its input field for the "custom" pose entry.
- Added time based actions on five fixed steps, from every ~1 second up to every ~15 minutes.
- Added a "Message" action for chat, system message and speech bubble text without a command.
- Added text variants, a sender name, a recipient and translation keys to the "Message" action.
- Added the speech bubble graphic as
easy_npc:textures/gui/speech_bubble.pngfor resource packs. - Added a "Chance" condition in percent and a "Relationship" condition for owner and faction.
- Added spawn, owner login, state change, day / night, weather and the missing "On Trade" events.
- Added a base preset per NPC type under
easy_npc:api/preset/base/, usable as a parent preset. - Added the "Wandering Companion" preset, a talkative NPC built from time based messages.
- Added an action registry, an action handler, a preset validator and richer event data for mods.
- Added a tooltip with name, type and distance to every NPC suggestion of the
/easy_npccommands. - Improved the NPC suggestions, which appear without typing and tolerate a near miss of one block.
### 7.5.0
- Fixed #814 by giving every Cobblemon NPC its own animation state instead of one per species.
- Fixed #813 by letting "Move back to Home" work at any distance instead of only near its home.
- Fixed #812 by checking once per session whether a player changed their skin.
- Fixed #810 by accepting Cobblemon aspects of resource packs instead of only "shiny" and "female".
- Fixed NPCs losing their owner, home and "No Gravity" setting after a respawn or a preset import.
- Fixed objectives keeping a gone target and being switched off when their target or mod was gone.
- Fixed flying NPCs like Allay, Vex and Ghast moving on the ground instead of flying.
- Fixed dialog, button, preset, pose and texture names with duplicates or special characters.
- Fixed conditions not being editable on a dedicated server and untranslated condition texts.
- Fixed Easy Model Entities NPCs not turning their head and their model list ignoring a
/reload. - Fixed the "Legacy Easy NPC Data" warning appearing for newly created NPCs.
- Fixed missing transparency corrections for old 64x32 skins, which showed layer artifacts.
- Fixed the player skin screen freezing for a moment while a player name was looked up.
- Fixed the "Reset look at ..." objective label, which read "Reset loot at ..." in some languages.
- Fixed the Fabric game tests, which crashed on start because of the development helper mods.
- Fixed the NPC data isolation and trading persistence game tests, which never ran on Fabric.
- Fixed walking animation for Doppler NPC and 3rd party models.
- Changed the movement objectives to a fixed order: flee, follow, return home, then stroll. NPCs
- Changed datapack presets to
easy_npc/preset/, the old folder still works, but only for easy_npc. - Changed the required Easy Model Entities version to 1.7.0, floating models now hover by default.
- Removed the experimental user-defined NPCs and the unused
SERVER_SKINskin type. - Added NPC states with number, yes/no and text values, usable as condition, action and command.
- Added a "Navigation" and a "Hover height" setting to switch any NPC between ground and flying.
- Added parent presets, presets from other mods, a preset visibility and the "Forge Keeper" preset.
- Added custom conditions, events, an NPC identifier and more objective options for other mods.
- Added "On Far Distance" at 32 blocks and an option to spawn an NPC again when its owner logs in.
- Improved flying navigation and third party support with an API for presets and own objectives.
### 7.4.0
- Fixed #807 by no longer pulling every same-type NPC within 32 blocks into a "Defend Self" fight.
- Fixed #805 by evaluating all visibility settings together instead of stopping at the first one.
- Fixed #804 by keeping the custom name on Doppler NPCs for name based textures and the name tag.
- Fixed #803 by adjusting assets to match typical Minecraft style instead of generic UI style.
- Fixed the day and night detection, which counted sunrise as night and sunset as day.
- Fixed the visibility in the Nether and the End, which used the Overworld time.
- Fixed the time and game mode visibility checkboxes appearing in a random order.
- Fixed game tests only being able to fail on their first assertion, which hid later failures.
- Fixed the "Saddled" horse skin variants, which never showed a saddle.
- Changed "Visible to Owner" and "Visible to Team" to also follow day, night and game mode.
- Changed Evoker, Illusioner and Vindicator variants without "Crossed Arms" to keep their arms down.
- Added a "Defend Faction" objective that attacks whoever hurt a nearby faction member or player.
- Added a system message when faction members fight each other and the faction stays out of it.
- Added a head equipment slot for Illagers so their captain banner can be removed or swapped.
- Added a day and night preview to the display configuration screen.
- Added unit and game tests for the visibility attributes and the faction defense.
- Improved the visibility check performance by reading the display attributes only once per check.
- Improved display attributes from older versions by completing them with their defaults.
- Improved the attack objective screen by disabling "Protect Owner" and "Defend Faction" when unset.
### 7.3.0
- Improved skin variants by carrying their data as typed fields instead of parsing variant names.
- Centralized the Cobblemon mod id and default model on shared constants.
- Reduced duplicated enum code with a shared
EnumUtilshelper forget(String)lookups. - Optimized villager profession and type lookups to use direct registry keys instead of scans.
- Optimized enum name lookups by caching tag names, ids and keys once at construction.
- Added unit and game tests for skin variants, villager resolution and the enum helper.
### 7.2.0
- Fixed #801 by using combination for NPC, Dialog and Action UUIDs to avoid collisions for action
### 7.1.1
- Fixed #800 by lazy loading entity types.
- Fixed #799 by fixing edge cases and adding additional documentation and better log messages.
- Fixed #798 by considering console, commands and command blocks as trusted command sources.
- Fixed a critical single-player / LAN issue where client and server NPCs shared the same registry.
- Fixed a memory leak in the configuration menu handling and added timeout and disconnect cleanup.
- Fixed duplicate downloads when several NPCs request the same skin at the same time.
- Fixed skin lookups failing after a error so a slow server no longer freezes the game.
- Fixed the URL skin screen freezing the game while checking a remote image; the check now runs in
- Added a new World Spawner block that limits an NPC preset across the whole world (all dimensions),
- Hardened remote skin downloads with a strict size limit and safe redirect handling to prevent
blockPrivateAddresses setting.- Improved server performance by only sending entity and player load events to NPCs that actually
### 7.0.0
- Fixed #791 by adding Wandering Trader NPC type.
- Fixed #788 by extending the AI safeguards to Epic Fight and raw NPC variants (Piglin, Villager,
- Fixed #787, #531, #237 and #184 by adding a faction system with
/easy_npc factioncommands,
- Fixed #787, #771 and #572 by adding a new
targetobjectives tab to attack hostile factions or
- Fixed #786 by adding gender and shiny model variants for Cobblemon NPCs, searchable via
female
shiny in the model selection.- Fixed faction combat between invulnerable NPCs by adding the new
Attackable by Factionscombat
- Fixed Cobblemon model selection previews for oversized species by scaling with Cobblemon's own
- Fixed faction management edge cases by validating faction names, sorting faction lists and
- Fixed custom skin reloads by loading and clearing texture caches per skin model instead of always
- Improved the
Attackable by Players/Monsters/Factionscombat attributes to work independently of
Invulnerable, each opening a targeted hole for its own attacker group.- Improved preset command and network handling by splitting the large handlers into smaller focused
- Added Easy Model Entities Support.
- Added faction manager and faction editor screens to create, color and delete factions and manage
FACTION_MANAGEMENT security feature.- Added new
Miscattributes tab as home for the NPC faction assignment. - Added reusable warning and help icon components for inline hints with tooltips.
- Added additional unit and game tests for factions, target objectives and Cobblemon model variants.
### 6.25.0
- Fixed #782, #636, #622 by preserving data components during validations.
- Fixed #780 by caching remote texture downloads and reducing duplicate registrations.
- Fixed #767 by clamping attribute sliders against extreme values from other mods.
- Fixed #754 by adding custom data item matching for NPCs with actions and conditions.
- Fixed texture manager running in the wrong thread may cause crashes and deadlocks in >= 1.21.x.
- Fixed empty UUID handling for action conditions.
- Fixed execution limit reset for actions.
- Added texture registration queue to avoid multiple simultaneous downloads in the same tick.
- Added NPC coin, key and red token as consumable items for NPCs with actions and conditions.
- Added
Welcome Coin Traderas example NPC preset with custom coin, key and red token item data. - Added attribute safeguards against extreme values from other mods.
- Increased fallback max health value from 1024 to 4096 for high-health NPCs.
- Improved texture manager by reducing duplicate texture checks and registrations.
### 6.24.0
- Fixed #459, #775 by adding an option to block interactions with invisible NPCs.
- Fixed #774 startup crash related to optional Epic Fight and Cobblemon entity type maps.
- Fixed #773 by checking timed trade resets during base ticks and before opening trade screens.
- Fixed trade reset timing by increasing internal tickers correctly.
- Added time of day and weather conditions for #459.
- Added additional unit and game tests for trade resets, ticker handling and entity attributes.
- Added
Skywatch Scoutas example NPC preset with time of day and weather conditions.
### 6.23.0
- Fixed #772 by adjusting texture retries with 403 and 404 errors and lowering logging.
- Fixed #770 item rendering for Epic Fight NPCs (Evoker, Pillager, Vindicator and humanoid skins).
- Fixed #769 door loops with NPCs not reliably opening or closing doors.
- Fixed #760 by adding a dialog option and config setting (buttonConditionMode: LOCK or HIDE) to
- Fixed #709 by adding color picker popup for names with 32 colors and/or a manual RGB/hex value.
- Fixed NPC name color being reset when renaming without a specified color by preserving the
- Improved the door movement attributes so "Pass Door" is automatically enabled while "Open Door"
### 6.22.0
- Fixed #766 by passing the full server player context to command execution for better compatibility
- Fixed #764 by adding entity health, npc health conditions and NPC preset
Grukk, the Sparring Post as example for using these conditions.- Fixed #763 by making sure dialog button execution limits are now recorded.
- Fixed #758 by providing a example NPC preset named
One Wish Companion. - Fixed crashes related to 3rd party villager AI reading non-registered brain memories on Easy NPC
- Fixed Dialog buttons are not locked for server-side data as preparation for #760 and #644.
- Fixed #628 by adding conditional dialog opening support / command for better control over when
- Added brain AI for Piglin and Piglin Brute NPCs and registered the full vanilla brain memory set.
- Added additional guns to the gun tag for #757.
- Added a new "Open Dialog (Conditional)" action that opens a named dialog only if its conditions
- Added new entity health and npc health conditions for actions, dialogs and dialogs buttons.
- Added Piglin, Piglin Brute and Zombified Piglin NPCs invulnerable, for consistency with other
- Added a new "Knockback Immunity" combat attribute that prevents the NPC from being knocked back by
- Added a new "Explosion Immunity" combat attribute that makes the NPC immune to explosion damage
- Moved the "Projectile Collision" attribute to the Combat attribute screen, where it fits better
### 6.21.0
- Fixed item attachment for Illagers in crossed-arms pose.
- Fixed broken illager crossbow attack goal.
- Fixed crashes related to 3rd party items which are not renderable as hand items #756.
- Fixed crashes related to 3rd party mixins trying to access non-existing model parts #756.
- Fixed log.info spam message by reducing log verbosity and adding additional checks for custom
- Improved EasyNPCModelManager performance.
- Refactored NPC renderers to remove default hand item layer.
### 6.20.0
- Fixed crashes related to 3rd mods trying to access non-existing NPCs goals.
### 6.19.0
Note: This update adjusted the dialog background images by 10x6 pixels, which may require users to
adjust their custom dialog backgrounds if they are using custom ones.
- Fixed #752, #130 by adding dialog button condition support to allow to disable buttons.
- Fixed #683, #215 by adding typewriter effect support for dialog text.
- Fixed #690, #309 by allowing conditions for dialog, dialog buttons and interactions.
- Fixed smaller UI issues with dialog screen layout and background.
- Refactored dialog background images by 10x6 pixels on each side.
- Refactored dialog screen layout to better fit the new background size and improve appearance.
- Added typewriter effect and client configuration for dialog text.
- Added condition symbols to indicate the condition status for dialog, buttons and interactions.
- Added amount field for item conditions to allow checking for specific amounts of items.
- Added
Threshold Wardenas example NPC preset with various conditions and actions. - Added smaller bug fixes and optimizations related to dialog conditions and button states.
### 6.18.0
Note: This update changes the internal data format for conditions and actions, which may reset /
remove legacy existing execution-limit entries without stored IDs.
- Fixed #745 by adding conditions for actions to allow more complex and dynamic behavior.
- Fixed #652 by adding dialog button tooltip for longer texts.
- Fixed #687 by adding command value tooltip to show the full value.
- Added Experience Level conditions.
- Added Game-mode conditions.
- Added has item in inventory condition.
- Added has item in hand condition with (main hand and off-hand) support.
- Added player health condition.
- Added player tag condition.
- Added player team condition.
- Added Goldmere example NPC preset with various conditions and actions.
- Added negative condition support to allow negating conditions for more complex logic.
- Removed parameter pseudo IDs for
ActionDataEntryand replaced them with random UUIDs. - Refactored condition system to allow more condition types.
### 6.17.0
- Fixed #738 by adding additional tooltips for "Execute as player"
- Fixed to detailed logs by reducing log.info messages during startup and in-game.
- Added additional unit and game-tests.
### 6.16.0
- Fixed #732 by providing option to disable ESC key and close button for dialogs.
- Fixed #723 by avoid auto-close in specific cases like trading screens.
- Added general dialog configuration options to allow users to customize dialog behavior.
- Added avatar scaling and position offset options for dialogs.
- Added missing translation keys.
### 6.15.0 (Trades, Player Heads, Epic Fight and QOL updates)
- Fixed #731 by resyncing species data, if species list is empty on the client.
- Fixed #730 by improving Epic Fight integration and enabled experimental features.
- Fixed #729 by making sure trade uses are stored correctly.
- Fixed #728 by adding custom head support for player heads.
- Fixed #689 by showing remaining trade uses and allow resetting manually and automatically.
- Fixed #218 and #132 with new trade configuration screen and better support for custom trades.
- Fixed trade specific edge by switching between basic and normal/advanced trading mode.
- Fixed dialog button text is truncated with tooltip showing the full text.
- Fixed Cobblemon animation issues by syncing animation state with Cobblemon Animation System.
- Added per trade specific actions to allow users triggering actions after buys.
- Added trade reset button to reset all trades easily.
- Added trade usage information to trade configuration screen.
- Added experimental feature state to allow users to manually enable experimental features.
- Added Griselda Grindstone as example trader with actions.
- Cleanup test files.
### 6.14.0
- Fixed #727 by making sure changes are synced to the client when changing values.
- Fixed #726 by adding additional allow lists for specific commands.
- Fixed #686, #389, #304, #211 by adding basic Cobblemon support with Cobblemon NPC.
- Fixed dialog misalignment and navigation issues by adjusting dialog sprites and screens.
- Fixed x and z root rotation by correcting rotation logic and pivot calculations.
- Added basic Cobblemon support with custom NPC type and model for testing.
### 6.13.0 (Security and Permissions Updates)
Notes: This update includes better security checks and permissions for multiplayer environments. It
allows to execute server commands which can be potentially dangerous if used with malicious intent.
- The update splits the model root data and logic from the rest of the model part data and logic,
- Fixed #725 by separating model root data and logic from the rest of the model part data and logic.
- Fixed #722 by supporting .sbnt files as local presets.
- Fixed #675 by adding dedicated assets for dialog and config screen backgrounds.
- Fixed #605, #532, #529 with new security checks and permissions system.
- Fixed #469, #311 by adding experimental api documentation and examples for custom model support.
- Fixed double rendering of config screen background by removing redundant background rendering.
- Fixed Ghast and Slime hitbox and name tag position issues by adjusting bounding box.
- ⚠️ Added security checks to prevent potential exploits and allow safe usage in multiplayer
- Replaced dynamic dialog screen background with a static one for better performance, customization
- Replaced dynamic config screen background with a static one for better performance.
- Refactored config-ui specific components and removed them from the core mod.
- Removed duplicated sprite sheets.
- Prepare permission system for possible Luck Perms integration in the future like #712.
- General code cleanup and optimizations related to config screen rendering and assets.
### 6.12.0
- Fixed #714 by adding additional checks for custom model part list based on vanilla models.
- Fixed #713 by reducing log verbosity with downgraded per-NPC INFO messages to DEBUG and
- Fixed #711 by reduced oversized startup/config log output.
- Fixed NBT validation guard to prevent unnecessary buffer allocations in production.
- Added model part name constants to EasyNPCModelManager for consistent usage across mixins.
- Improved RenderEntityTypeSupportConfig by enhancing filter logic and optimizing data structures
- Removed verbose debug logs that dump large data structures.
### 6.11.1
- Fixed #710 by improving backward-compatible parsing for recoverable trade data.
### 6.11.0
- Fixed #703 rendering issue with new custom layer system and hand renderings.
- Fixed #701 by adding additional safeguards and logging for invalid trading offers.
- Fixed smart animation not working properly with modified head position.
- Fixed head tracking by moving player detection back to server side-only.
- Fixed CustomLookAtPlayerGoal to better handle edge cases and reduce jitter.
- Fixed issue with Doppler NPCs keeping their hand inventory.
- Improved PoseManager logging message.
- Updated logo with a new design.
### 6.10.0
- Fixed #698 by adding try and catch for 3rd party entity creation.
- Fixed #695 by clearing model part rotations/positions when switching to a
DEFAULTvanilla pose. - Fixed #695 by applying lock rotation and pose animation only when the NPC is idle.
- Fixed #695 by correcting root rotation pivot to use actual bounding box height instead of 0.5f.
- Fixed multiple objective registration issues including inverted
isTargetedPlayercheck, wrong
targets.
- Fixed goal reference being retained after objective is unregistered.
- Removed auto-lock of ROOT rotation when loading poses; root lock is now user-controlled.
- Added lock rotation checkbox to the advanced and custom pose configuration screens.
- Added model-specific pose key filtering in
ConfigurationMenuHandlerfor the default pose screen. - Added unit tests for
CustomPosition,CustomRotation,CustomScale,ModelPose,
ModelAnimationBehavior and ModelAnimationData.- Added
NPCDataIsolationTestHelperand game tests for Fabric and Forge. - Increased max head yaw range from 60° to 65°.
### 6.9.0
- Fixed #692, #666 by adding caching and safeguards to prevent redundant retriggering of NPC entity
- Fixed #651, #617 by adding basic custom poses for all supported NPC types.
- Fixed #597 by adding additional Flee goals for fleeing from players, villagers, monsters, ...
- Fixed pose loading to read directly from mod resources instead of copying files to disk.
- Fixed duplicate
saveNPCcalls on entity join by checking existing registry entry first. - Added
despawnandspawncommands to remove and re-spawn NPCs by UUID with configurable removal
- Added
ModelPoseAPIandEasyNPCEntityHandlerpublic API classes for controlling NPC poses and
- Added pose data files for all supported NPC types.
- Added lock rotation checkbox to the basic pose configuration screen.
- Added
MoveToPositionGoalto move an NPC to a position before executing a callback action. - Added
EasyNPCLookControlandEasyNPCBodyRotationControlto respect locked root rotation. - Added synced owner change and dimension change to the NPC entity data index.
- Added EasyNPCItemAttachmentLayer into various entity renderers.
- Added dedicated
Flee Objectiveconfiguration tab with objectives for fleeing creepers, monsters,
- Added
FOLLOW_ITEMobjective to the follow objectives tab to make NPCs follow item entities by
minecraft:apple).- Added
LookAtEntityByUUIDGoaland enabled the look-at-entity-by-UUID and look-at-owner objectives
- Added
persistentflag toSynchedDataIndexso that transient indices (e.g. crossbow charge,
- Added configurable
customParticlesEnabledflag toSlimeBasefor API consumers. - Added
SoundType.PETand mappedCAT_PURRto the cat NPC for tamed ambient sound variety. - Reduced log verbosity for periodic NPC save operations from INFO to DEBUG.
### 6.8.3
- Fixed #680 by enforcing version miss-match by upgrading network protocol version.
- Fixed #679 by resetting position, rotation and size for name tag.
- Fixed #665 by adding multi state slide for root rotations.
- Fixed #664 by adding option to disable following mouse cursor for easier posing.
- Fixed #663 by improve support for X and Z root rotations.
- Fixed #661 by adding quick rotation with NPC wand and sneaking to the NPC to rotate the root to
- Fixed move tool is wrongly triggering interactions by adding check for move tool in interaction
- Fixed Preset Item is wrongly triggering interactions by adding check for preset item in
- Fixed Slime and Ghast hitbox and name tag position issues by adjusting bounding box and eye height
- Fixed Slime and Ghast GUI position by adjusting offset values.
### 6.8.2
- Fixed #677 by extending
SafeMerchantDatawith notifyTrade to avoid crashes. - Added progression data support for leveling up NPCs based on player interactions and actions.
- Added global NPC tracking system for better management and debugging of NPCs across the world.
- Added
OriginalModelConfig.withVariantTexture()option to allow using variant textures with the
### 6.8.1
- Fixed #676 by using existing preset helper method instead of custom one.
### 6.8.0 (Adding API support)
- Fixed #667 by adding warning messages and additional checks for invalid network packets.
- Fixed Horse spawn eggs model.
- Fixed pose support for allay, chicken, creeper, fox, ghast, horse, illager, iron golem, slime and
- Added NPC base classes for better API support.
- Added NPC raw classes for advanced API support.
- Added Slim and Ghast NPC types.
- Added Custom Model API for easier integration with other mods and custom models.
- Refactored internal data handling and registration for better maintainability and future
### 6.7.1
- Fixed #657 and #656 by adding additional client side checks for vanilla bug.
### 6.7.0
- Fixed #650 by implementing Wolf Leg Animations in setupAnim method.
- Fixed #648 by fixing canBeHitByProjectiles translation.
- Fixed #645 by adding
allowBypassInvulnerabilityconfig option to allow/deny bypassing
- Fixed delete button showing label even with small width.
- Fixed up and down buttons not positioned correctly in some cases.
- Fixed name tag showing up for dialog and configuration UI.
- Fixed distance action issue were multiple actions are not properly triggered.
- Fixed issues with NPC presets.
- Fixed Cat NPC and Wolf NPC owner data not syncing properly.
- Added preset browser for easier selection of common NPC presets.
- Added preset .snbt (text) export and import functionality for sharing NPC presets.
- Refactored existing NPC presets to use new .snbt format.
- Refactored spawner system to use new preset format for better maintainability and future
### 6.6.2
- Fixed #643 by rework scaling system.
- Fixed scaling not properly updating hitbox and nametag position after restart / reload.
- Added MID and MOUSE_OVER name tag visibility modes for finer control over NPC name display.
- Added team-based name tag visibility support respecting vanilla Team.
### 6.6.1
- Fixed #638 by refactored internal data handling for display attributes.
### 6.6.0
- Fixed #634 by implementing asynchronous texture loading with dedicated thread pool.
- Fixed texture loading blocking render thread causing game freezes.
- Fixed race conditions in texture reload protection using atomic operations.
- Fixed resource leaks in HTTP connections during remote texture downloads.
- Fixed URL validation spam allowing multiple simultaneous downloads of the same texture.
- Fixed exception handling for remote image validation preventing crashes on invalid URLs.
- Fixed
defineId called for:warning messages during NPC loading. - Refactored texture loading architecture with multi-level defense and rate limiting.
- Refactored entity data registration logic for better maintainability.
- Converted data classes to modern Java records for better immutability and thread-safety.
- Added thread-safe session server spam protection with ConcurrentHashMap.
- Added comprehensive error recovery with automatic cooldown reset on failures.
- Improved texture loading with 2-thread pool and 500ms rate limiting.
- Improved exception handling with specific catch blocks for IIOException and FileNotFoundException.
### 6.5.2
- Fixed Villager profession and job skin issue.
- Improved GitHub workflows by adding cache for gradle dependencies.
- Improved Gradle build time and cleanup tasks.
### 6.5.1
- Fixed #632 by implementing ON_KILL action type and event.
- Fixed #629 by improving texture handling performance, caching, and memory usage.
- Fixed kill command is not working on NPCs.
- Fixed texture reload protection preventing cache reload after eviction.
- Fixed WebP validation bug in remote image validator (missing return statement).
- Refactored texture handling logic for better maintainability and future improvements.
- Added time-based reload protection (60 seconds) to replace permanent blocking mechanism.
- Added additional unit tests for texture handling.
- Improved gradle build tasks.
### 6.5.0
- ⚠️ Removed jar-in-jar bundle approach for better mod compatibility and api capabilities.
- Fixed #627 scissor implementation for better compatibility with other mods.
- Fixed #625 lively animation issues when using rotated or moved model parts.
- Fixed default animation are canceled when using scaled model parts.
- Added better pose animation control with smart, default und none options.
### 6.4.1
- Fixed #626 screen switching logic for different NPC UUIDs, thanks to
Spawnbladefor the detailed
### 6.4.0
- Fixed #626 by improving dialog data validation and error handling.
- Fixed #623 by refactoring render data and render handling.
- Fixed #622 by making sure custom data are properly saved and loaded.
- Fixed open dialog action type to allow opening dialogs from other NPCs.
- Fixed hashing issues by adding missing equals and hashCode methods for ConditionDataSet and
- Added custom data test item for #622 and easier testing of custom data.
- Improved records and fixed potential issues with missing data.
### 6.3.0
- Refactored config ui specific components and removed them from the core mod.
- Fixed dialog data by filtering dialog data before sending to the client.
- Fixed dialog editor layout issues and improved usability.
- Fixed missing default values for some dialog data fields.
- Added dialog priority support to control the order of dialog execution.
- Added condition support for dialog and scoreboard actions.
- Added frequency support for dialog to limit how often an dialog can be shown.
- Added new NPC preset to for scoreboard and condition support.
- Improved dialog button data format by removing redundant fields.
### 6.2.0
- Fixed string injection within dialogs.
- Fixed missing translation for action types.
- Added scoreboard action type to increase, decrease, set scoreboard values.
- Added
@score(...)NPC macro to display scoreboard values in the dialog. - Added additional unit tests.
- Improved spin button with indicators and better usability.
### 6.1.2
- Fixed container and menu sync issues with missing close container packets.
- Fixed close button not working in some cases.
- Fixed jumping mouse cursor between screen transitions.
- Fixed translation files and removed duplicate and deprecated entries.
- Moved Easy NPC wand to existing core item tab instead of creating a new one.
- Added cat pose support for different model parts (except tail).
- Improved EasyNPCWand glowing effect performance by disabling it when not needed.
- Improved custom entity detection by excluding non-living entities like displays, makers, throwns
- Improved cat variant handling.
### 6.1.1
- Fixed #612 by re-validating entity types.
- Fixed #610 by force sync of hat and head layers for specific models.
- Fixed orc textures.
- Improved custom model support and performance, by moving related logic into to client side only.
- Improved caching of player to UUID mappings for player skins.
- Limited change model commands and logic to Doppler NPCs only.
### 6.1.0 ✨
This is a major release. Please back up your worlds and NPC data before updating. This version
contains many improvements, optimizations, and internal changes that are **not fully compatible**
with earlier releases.
⚠️ Breaking changes
- Existing NPCs and their configuration data from versions before 6.1.0 may not load correctly or
- Internal data formats and some behaviors have been refactored to support new use-cases.
🧩 New modular structure
Easy NPC is now split into three separate mods:
- Easy NPC** – Bundle that includes both Core and Configuration UI for a plug‑and‑play experience.
- Easy NPC: Core** – Lightweight runtime and logic for NPCs, with minimal dependencies. Intended
- Easy NPC: Configuration UI** – Standalone configuration interface for creating and editing NPCs.
🎯 Why this change?
- Allows servers and modpacks to ship only the **Core** mod on the server side for a leaner setup.
- Reduces memory usage and load times when the UI is not required everywhere.
- Makes development and testing faster by separating UI and core logic.
[history]: https://github.com/MarkusBordihn/BOs-Easy-NPC/commits/
[upgrade_guide]: https://github.com/MarkusBordihn/BOs-Easy-NPC/wiki/Upgrading
## Note
This change log includes the summarized changes. For the full changelog, please go to
the [GitHub History][history] instead.
Note: Please always back up your world / NPCs before updating to a new version!
Check the [upgrade guide][upgrade_guide] for more information.
### 7.15.0
- Fixed #838 by keeping preset imports silent when run through
/executeor command blocks. - Fixed #380 by applying the NPC limit to the default spawner as well.
- Fixed #849 by allowing resource pack sounds in the sound configuration.
- Fixed #349 by no longer spawning NPCs left-handed at random.
- Fixed #851 by locking dialog buttons per dialog, not across dialogs with the same label.
- Fixed deleted or duplicated NPCs returning, memory leaks and several owner and UI issues.
- Fixed the Epic Fight Wither Skeleton NPC missing its Epic Fight mob patch.
- Changed requirements: same mod version on client and server, Easy Model Entities 2.5.0+.
- Changed backups of all worlds and killed NPC data to expire after 30 days, see
storage.cfg. - Added "Jump", "Assist Owner" and "Follow Nearest Player" to fix #845, fix #310, fix #761.
- Added an NPC inventory with item pickup and death drops to fix #111, fix #197, fix #543, fix #670.
- Added "Sit on Shoulder", a boss bar and
/easy_npc debug core loglevelto fix #577, fix #219. - Added the "Hold" animation mode, a "Bank Teller" preset and new API methods for addons.
### 7.14.0
- Fixed #846 by keeping custom poses for players who start seeing the NPC later.
- Fixed attribute and trading settings missing for players who start seeing the NPC later.
- Fixed changed max uses, XP and trading type not shown in the trading screens until reload.
- Fixed
/easy_npc sound setchanges not reaching players until the NPC was reloaded. - Added game tests that check NPC poses and settings after respawns and for new players.
### 7.13.0
- Fixed color and formatting tags in dialog button names showing as plain text.
- Fixed the button preview in the editor showing lowercase names as a raw translation key.
- Fixed the "Move EasyNPC" item not working for NPC owners outside of creative mode.
- Fixed
/easy_npc owner setreporting success even when the owner could not be changed. - Fixed the game crashing when the URL or player skin screen showed a skin download error.
- Fixed the preset browser search showing no results after scrolling down the list.
- Changed the network protocol version, so client and server must run the same mod version.
- Added
@initiator,@npcand@score()support to dialog button names to fix #841. - Added automatic client tests with the Client Runtime Interface Toolkit.
- Larger core refactoring and code cleanup.
### 7.12.2
- Fixed the Fairy hitbox being far too small, so its name tag and speech bubble sat in its body.
- Fixed scaled NPCs keeping their old hitbox and eye level, so hits, clicks and looking missed.
- Fixed malformed network packets disconnecting players instead of being ignored.
- Fixed invalid NPC positions, scales, attributes, names and durations from being applied.
- Changed Fairy NPCs to take up the space of their model, so they collide and can be clicked.
- Changed the network protocol version, so client and server must run the same mod version.
### 7.12.1
- Fixed #836 by always showing "Restore", including datapack presets, with a reason tooltip.
- Fixed preset import and export messages missing, wrong or not warning about replaced NPCs.
- Fixed the preset browser reloading on each keystroke, leaking NPCs and clearing the selection.
- Fixed the preset list sorting, filter order and layout clipping options in small windows.
- Fixed
/easy_npc preset import datawithout a position importing it as a default preset. - Fixed spawn rate limit leaks, unstable preset IDs and "Spawn New" stacking NPCs on one spot.
- Changed "Restore" to refuse instead of spawning a copy when it is not permitted.
- Added sorting, a match count, reload, auto-close, the NPC ID and tooltips for presets and skins.
- Added
matching <pattern>batch imports with limits, a confirmation and a clickable position.
### 7.12.0
- Fixed #833 by showing Easy NPC Wand outlines only to the wand holder, owner and admins.
- Fixed #834 by adding "Set Home Here" and "Reset Home" buttons to the position configuration.
- Fixed #835 by keeping the NPC ID and position in exported presets, so imports restore the same
- Fixed preset imports and spawn eggs losing the owner's list entry and owner objectives.
- Fixed NPCs restored from an automatic backup losing their owner and becoming ownerless.
- Fixed selection lists showing only their first six entries and hiding the rest.
- Changed importing a preset to update the original NPC at its stored position instead of adding a
- Changed completed trades to play the "Trade completed" sound, which stayed silent before.
- Changed the API dialog call to report an unknown dialog label instead of always reporting success.
- Changed NPCs without arms to carry held items at the head or body instead of hiding them.
- Changed the optional Easy Model Entities dependency to require version 2.4.0 or newer.
- Added a "Sound" configuration with sounds for dialogs, speech, swimming, eating and fall damage.
- Added a searchable sound selection with volume and pitch sliders to the "Sound" configuration.
- Added a "Block Vehicles" option to keep NPCs out of boats, minecarts and modded chairs.
- Added the profession selection to all skin configurations and a new built-in skin per NPC type.
- Added client settings to hide name tags behind walls and
highlightEnabledfor wand outlines. - Added an "Exists" condition operation and API access to NPC movement, actions and presets.
### 7.11.0
- Fixed #828 by no longer freezing the server on logout when NPCs follow or watch the player.
- Fixed #831 by moving routine NPC removal messages to the debug log.
- Fixed #832 by making humanoid NPCs ignore custom player models, animations and poses.
- Fixed hourly NPC backups stuttering on large worlds and retaining timestamps of removed NPCs.
- Fixed owner-login restoration duplicating, repeatedly restoring, reviving or moving unloaded NPCs.
- Fixed NPC index and file synchronization issues causing lost NPCs, crashes or false warnings.
- Fixed stale NPC data after unloading, avoided redundant writes and added repeated-unload warnings.
- Fixed the preset browser failing to list custom and world presets saved in the SNBT format.
- Fixed speech bubbles losing their text and turning translucent with Iris shaders.
- Fixed text formatting and macro parsing for translated speech bubbles and mod API texts.
- Added
minLightLevelto keep speech bubbles readable in dark surroundings.
### 7.10.0
- Fixed #829 by allowing bats and other non-walking mobs as the render entity of a Doppler NPC.
- Fixed the NPC name tag showing above the previews in the "Custom Models" configuration.
- Fixed speech bubbles being cut off by walls, doorframes and the NPC's own body.
- Changed overlapping speech bubbles to move apart and to stay visible when the NPC is off-screen.
- Changed "Navigation: Automatic" to use flying movement for NPCs rendered as a flying mob.
- Changed the render entity list to hide seats, paintings, thrown items and other non-mob entities.
- Added a "Min. hover height" slider for flying NPCs and client settings for speech bubbles.
### 7.9.0
- Fixed modded fish NPCs, like the ones of Tide 2, spinning around instead of swimming upright.
- Fixed "Navigation: Automatic" using ground movement for water NPCs and aquatic model NPCs.
- Fixed the "Random Swimming" objective never moving an NPC that uses aquatic navigation.
- Fixed a swimming NPC shaking or twitching in place instead of holding its tilt and swim depth.
- Fixed a swimming NPC turning in circles forever when it could not reach its next path point.
- Fixed an NPC that fell into water never getting out of it again.
- Fixed a following NPC searching a new path every tick while its target was unreachable.
- Fixed the "Move to" actions stopping short of a raised target or not starting while in the air.
- Fixed "Move back to Home" ignoring height differences and never returning from beyond 32 blocks.
- Fixed the "Opacity" input field being too narrow to show a value of 100.
- Fixed a damaged NPC with an Easy Model Entities model never flashing red.
- Changed modded water NPCs to swim level, vanilla water mobs keep their tilt as before.
- Changed the "Move to" actions to walk up to 48 blocks and to teleport only beyond that range.
- Changed "Move to" and "Move back to Home" to give up after three seconds without progress.
- Changed the timeout of a "Move to" action to count real ticks, it ran twice as long before.
- Changed a new "Random Swimming" objective to rank below following, fleeing and attack goals.
- Changed "Opacity" of an NPC with an Easy Model Entities model to be applied by that mod itself.
- Changed the minimum Easy Model Entities version to 2.3.0, older versions disable the integration.
- Added "Depth below surface" and "Height above floor" sliders for the swim level of an NPC.
- Added log entries for the NPC files written on a world save, with a warning above 250 ms each.
### 7.8.1
- Fixed #827 by rendering fish NPCs in water upright instead of always flopping on their side.
- Fixed #828 by keeping a damaged NPC from blocking the world save, it now falls back to defaults.
- Fixed a restored NPC picking up a random preset ID that changed with every save.
- Changed NPC data to only be written to disk when it actually changed.
### 7.8.0
- Fixed smaller text and UI issues.
- Changed an NPC that is already standing at its target position to finish the movement right away.
- Changed the "None" skin tab to "Advanced", which now holds "Disable Skin" and the texture field.
- Added a "Move to" action, which sends an NPC to a position, a player, its owner or its home.
- Added a "Move to and Wait" action, which runs the following actions only after the arrival.
- Added an arrival radius, a timeout and an optional teleport to both move actions.
- Added an "Opacity" attribute from 0 to 100, which fades body, armor and hand items together.
- Added a "Set Opacity" action, which turns an NPC into a ghost or hides it completely.
- Added the "Lantern Wraith" preset, a ghost walking a square with a short line at every corner.
- Added API access to the move actions and the opacity of an NPC.
- Added a "Resource Location" skin type, which renders any texture of a mod or a resource pack.
- Added an "Advanced" skin tab, which previews the NPC with the entered texture before applying it.
### 7.7.7
- Fixed #821 by keeping the transparency of 64x64 skins, which Fresh Moves needs for its eyes. Skins
- Fixed #818 by running trade actions for Villager and Wandering Trader NPCs as well.
- Fixed a dialog with several text variants switching its speech bubble size every second.
- Fixed the skin cache storing the processed image instead of the original download.
- Fixed the untranslated interval names, like
PER_DAY, of the "Execution Limit" condition. - Fixed the
sitanimation of Easy Model NPCs, which never used the built-in sitting pose. - Fixed the speech bubble being cut off by the head of an NPC when a player stood close to it.
- Changed speech bubbles to keep their screen size and to move down or aside when a player is close.
- Changed the speech bubble text to render 20% larger than a name tag.
- Changed a time based action set with a "Wait" action to run in order instead of picking one entry.
- Changed dialog texts to wrap later, so an existing dialog can switch to the wider screen layout.
- Changed fallback actions to skip screen actions without a player, like the regular actions do.
- Changed the minimum Easy Model Entities version to 2.1.0, older versions disable the integration.
- Added a "Wait" action, which pauses the following actions of an event for a chosen duration.
- Added the "Countdown Timekeeper" preset, a speech bubble count to ten ending in sound and sparks.
- Added scaling and rotation for Doppler NPCs behind the "Experimental Features" checkbox. Both only
- Added a "Sound" action, which plays a sound at the NPC with sound category, volume and pitch.
- Added "Every 5 Minutes" and "Every 15 Minutes" to the "Execution Limit" condition.
- Added a "Player Idle" condition, which checks how long a player has not moved.
- Added an "Immovable" attribute, which keeps an NPC in place against pushing and knockback.
- Added
/easy_npc pauseto pause a single NPC or all NPCs; the global pause ends with the server. - Added API access to the sound action, the pause state and the idle time of a player.
- Added a texture override per model slot for Easy Model NPCs over
/easy_npc render texture. - Added a "Repeat" playback mode with a count and a time limit to the "Play Animation" action.
- Added API access to animation variants, texture slots and textures of Easy Model NPCs.
### 7.6.0
- Fixed unclear mod conflict errors for duplicate entity data tracker IDs.
- Fixed third-party health bars rendering over NPC previews in configuration and dialog screens.
- Fixed Doppler and Easy Model Entities NPCs using default hitboxes instead of their model size.
- Fixed the
/easy_npccommands suggesting no NPC UUIDs at all on a server. - Fixed the pose list of the "Set Pose" action drawing over its input field.
- Fixed the untranslated "Loop", "After current" and "Action Data Type" labels of the action editor.
- Fixed the missing hint text of the "Chance" condition.
- Fixed long condition hints running out of the editor screen instead of wrapping.
- Fixed the misaligned help icons and text buttons of the "Message" action.
- Fixed changes to the "Set Pose", "Play Animation" and "Stop Animation" actions not being saveable.
- Fixed the speech bubble text sitting closer to its upper border than to its lower one.
- Changed the NPC suggestions to list the crosshair NPC first and only own NPCs without permissions.
- Changed a preset export to only store what differs from a new NPC, without position or owner.
- Changed a preset without objectives or actions to fall back to the defaults of its NPC type.
- Changed events without a player, like "On Spawn" or "On Kill", to check their conditions. An
- Changed a time based action to pick the owner as
@initiatorwhenever the owner is nearby. - Changed speech bubbles to stay visible from 5 up to 18 seconds, depending on the text length.
- Changed the "Set Pose" action to only show its input field for the "custom" pose entry.
- Added time based actions on five fixed steps, from every ~1 second up to every ~15 minutes.
- Added a "Message" action for chat, system message and speech bubble text without a command.
- Added text variants, a sender name, a recipient and translation keys to the "Message" action.
- Added the speech bubble graphic as
easy_npc:textures/gui/speech_bubble.pngfor resource packs. - Added a "Chance" condition in percent and a "Relationship" condition for owner and faction.
- Added spawn, owner login, state change, day / night, weather and the missing "On Trade" events.
- Added a base preset per NPC type under
easy_npc:api/preset/base/, usable as a parent preset. - Added the "Wandering Companion" preset, a talkative NPC built from time based messages.
- Added an action registry, an action handler, a preset validator and richer event data for mods.
- Added a tooltip with name, type and distance to every NPC suggestion of the
/easy_npccommands. - Improved the NPC suggestions, which appear without typing and tolerate a near miss of one block.
### 7.5.0
- Fixed #814 by giving every Cobblemon NPC its own animation state instead of one per species.
- Fixed #813 by letting "Move back to Home" work at any distance instead of only near its home.
- Fixed #812 by checking once per session whether a player changed their skin.
- Fixed #810 by accepting Cobblemon aspects of resource packs instead of only "shiny" and "female".
- Fixed NPCs losing their owner, home and "No Gravity" setting after a respawn or a preset import.
- Fixed objectives keeping a gone target and being switched off when their target or mod was gone.
- Fixed flying NPCs like Allay, Vex and Ghast moving on the ground instead of flying.
- Fixed dialog, button, preset, pose and texture names with duplicates or special characters.
- Fixed conditions not being editable on a dedicated server and untranslated condition texts.
- Fixed Easy Model Entities NPCs not turning their head and their model list ignoring a
/reload. - Changed the movement objectives to a fixed order: flee, follow, return home, then stroll. NPCs
- Changed datapack presets to
easy_npc/preset/, the old folder still works, but only for easy_npc. - Changed the required Easy Model Entities version to 1.7.0, floating models now hover by default.
- Removed the experimental user-defined NPCs and the unused
SERVER_SKINskin type. - Added NPC states with number, yes/no and text values, usable as condition, action and command.
- Added a "Navigation" and a "Hover height" setting to switch any NPC between ground and flying.
- Added parent presets, presets from other mods, a preset visibility and the "Forge Keeper" preset.
- Added custom conditions, events, an NPC identifier and more objective options for other mods.
- Added "On Far Distance" at 32 blocks and an option to spawn an NPC again when its owner logs in.
- Improved flying navigation and third party support with an API for presets and own objectives.
### 7.4.0
- Fixed #807 by no longer pulling every same-type NPC within 32 blocks into a "Defend Self" fight.
- Fixed #805 by evaluating all visibility settings together instead of stopping at the first one.
- Fixed #804 by keeping the custom name on Doppler NPCs for name based textures and the name tag.
- Fixed #803 by adjusting assets to match typical Minecraft style instead of generic UI style.
- Fixed the day and night detection, which counted sunrise as night and sunset as day.
- Fixed the visibility in the Nether and the End, which used the Overworld time.
- Fixed the time and game mode visibility checkboxes appearing in a random order.
- Fixed game tests only being able to fail on their first assertion, which hid later failures.
- Fixed the "Saddled" horse skin variants, which never showed a saddle.
- Changed "Visible to Owner" and "Visible to Team" to also follow day, night and game mode.
- Changed Evoker, Illusioner and Vindicator variants without "Crossed Arms" to keep their arms down.
- Added a "Defend Faction" objective that attacks whoever hurt a nearby faction member or player.
- Added a system message when faction members fight each other and the faction stays out of it.
- Added a head equipment slot for Illagers so their captain banner can be removed or swapped.
- Added a day and night preview to the display configuration screen.
- Added unit and game tests for the visibility attributes and the faction defense.
- Improved the visibility check performance by reading the display attributes only once per check.
- Improved display attributes from older versions by completing them with their defaults.
- Improved the attack objective screen by disabling "Protect Owner" and "Defend Faction" when unset.
### 7.3.0
- Improved skin variants by carrying their data as typed fields instead of parsing variant names.
- Centralized the Cobblemon mod id and default model on shared constants.
- Reduced duplicated enum code with a shared
EnumUtilshelper forget(String)lookups. - Optimized villager profession and type lookups to use direct registry keys instead of scans.
- Optimized enum name lookups by caching tag names, ids and keys once at construction.
- Added unit and game tests for skin variants, villager resolution and the enum helper.
### 7.2.0
- Fixed #801 by using combination for NPC, Dialog and Action UUIDs to avoid collisions for action
### 7.1.1
- Fixed #800 by lazy loading entity types.
### 7.1.0
- Fixed #799 by fixing edge cases and adding additional documentation and better log messages.
- Fixed #798 by considering console, commands and command blocks as trusted command sources.
- Fixed a critical single-player / LAN issue where client and server NPCs shared the same registry.
- Fixed a memory leak in the configuration menu handling and added timeout and disconnect cleanup.
- Fixed duplicate downloads when several NPCs request the same skin at the same time.
- Fixed skin lookups failing after a error so a slow server no longer freezes the game.
- Fixed the URL skin screen freezing the game while checking a remote image; the check now runs in
- Added a new World Spawner block that limits an NPC preset across the whole world (all dimensions);
- Hardened remote skin downloads with a strict size limit and safe redirect handling to prevent
blockPrivateAddresses setting.- Improved server performance by only sending entity and player load events to NPCs that actually
### 7.0.0
- Fixed #791 by adding Wandering Trader NPC type.
- Fixed #788 by extending the AI safeguards to Epic Fight and raw NPC variants (Piglin, Villager,
- Fixed #787, #531, #237 and #184 by adding a faction system with
/easy_npc factioncommands,
- Fixed #787, #771 and #572 by adding a new
targetobjectives tab to attack hostile factions or
- Fixed #786 by adding gender and shiny model variants for Cobblemon NPCs, searchable via
female
shiny in the model selection.- Fixed faction combat between invulnerable NPCs by adding the new
Attackable by Factionscombat
- Fixed Cobblemon model selection previews for oversized species by scaling with Cobblemon's own
- Fixed faction management edge cases by validating faction names, sorting faction lists and
- Fixed custom skin reloads by loading and clearing texture caches per skin model instead of always
- Improved the
Attackable by Players/Monsters/Factionscombat attributes to work independently of
Invulnerable, each opening a targeted hole for its own attacker group.- Improved preset command and network handling by splitting the large handlers into smaller focused
- Added Easy Model Entities Support.
- Added faction manager and faction editor screens to create, color and delete factions and manage
FACTION_MANAGEMENT security feature.- Added new
Miscattributes tab as home for the NPC faction assignment. - Added reusable warning and help icon components for inline hints with tooltips.
- Added additional unit and game tests for factions, target objectives and Cobblemon model variants.
### 6.25.0
- Fixed #780 by adding additional caching and optimization for remote texture downloads.
- Fixed #767 by safeguard attribute sliders against astronomical values from other mods.
- Fixed #754 by adding custom data item matching for NPCs with actions and conditions.
- Fixed texture manager running in the wrong thread may cause crashes and deadlocks in >= 1.21.x.
- Fixed issue with empty UUID for action conditions causing unintended behavior.
- Fixed execution limit reset for actions.
- Added Texture registration queue to avoid multiple simultaneous downloads in the same tick.
- Added NPC coin, key and red token as consumable items for NPCs with actions and conditions.
- Added
Welcome Coin Traderas example NPC preset with custom coin, key and red token as example
- Added general safeguard for attributes against astronomical values from other mods.
- Increased fallback max health value from 1024 to 4096 to allow for more complex NPCs.
- Improved texture manager and eliminated duplicated texture checks and registrations.
### 6.24.0
- Fixed #459, #775 by adding an option to block interactions with invisible NPCs.
- Fixed #774 startup crash related to optional Epic Fight and Cobblemon entity type maps.
- Fixed #773 by checking timed trade resets during base ticks and before opening trade screens.
- Fixed trade reset timing by increasing internal tickers correctly.
- Added time of day and weather conditions for #459.
- Added additional unit and game tests for trade resets, ticker handling and entity attributes.
- Added
Skywatch Scoutas example NPC preset with time of day and weather conditions.
### 6.23.0
- Fixed #772 by adjusting texture retries with 403 and 404 errors and lowering logging.
- Fixed #770 item rendering for Epic Fight NPCs (Evoker, Pillager, Vindicator and humanoid skins).
- Fixed #769 door loops with NPCs not reliably opening or closing doors.
- Fixed #760 by adding a dialog option and config setting (buttonConditionMode: LOCK or HIDE) to
- Fixed #709 by adding color picker popup for names with 32 colors and/or a manual RGB/hex value.
- Fixed NPC name color being reset when renaming without a specified color by preserving the
- Improved the door movement attributes so "Pass Door" is automatically enabled while "Open Door"
### 6.22.0
- Fixed #766 by passing the full server player context to command execution for better compatibility
- Fixed #764 by adding entity health, npc health conditions and NPC preset
Grukk, the Sparring Post as example for using these conditions.- Fixed #763 by making sure dialog button execution limits are now recorded.
- Fixed #758 by providing a example NPC preset named
One Wish Companion. - Fixed crashes related to 3rd party villager AI reading non-registered brain memories on Easy NPC
- Fixed Dialog buttons are not locked for server-side data as preparation for #760 and #644.
- Fixed #628 by adding conditional dialog opening support / command for better control over when
- Added brain AI for Piglin and Piglin Brute NPCs and registered the full vanilla brain memory set.
- Added additional guns to the gun tag for #757.
- Added a new "Open Dialog (Conditional)" action that opens a named dialog only if its conditions
- Added new entity health and npc health conditions for actions, dialogs and dialogs buttons.
- Added Piglin, Piglin Brute and Zombified Piglin NPCs invulnerable, for consistency with other
- Added a new "Knockback Immunity" combat attribute that prevents the NPC from being knocked back by
- Added a new "Explosion Immunity" combat attribute that makes the NPC immune to explosion damage
- Moved the "Projectile Collision" attribute to the Combat attribute screen, where it fits better
### 6.21.0
- Fixed item attachment for Illagers in crossed-arms pose.
- Fixed broken illager crossbow attack goal.
- Fixed crashes related to 3rd party items which are not renderable as hand items #756.
- Fixed crashes related to 3rd party mixins trying to access non-existing model parts #756.
- Fixed log.info spam message by reducing log verbosity and adding additional checks for custom
- Improved EasyNPCModelManager performance.
- Refactored NPC renderers to remove default hand item layer.
### 6.20.0
- Fixed crashes related to 3rd mods trying to access non-existing NPCs goals.
### 6.19.0
Note: This update adjusted the dialog background images by 10x6 pixels, which may require users to
adjust their custom dialog backgrounds if they are using custom ones.
- Fixed #752, #130 by adding dialog button condition support to allow to disable buttons.
- Fixed #683, #215 by adding typewriter effect support for dialog text.
- Fixed #690, #309 by allowing conditions for dialog, dialog buttons and interactions.
- Fixed smaller UI issues with dialog screen layout and background.
- Refactored dialog background images by 10x6 pixels on each side.
- Refactored dialog screen layout to better fit the new background size and improve appearance.
- Added typewriter effect and client configuration for dialog text.
- Added condition symbols to indicate the condition status for dialog, buttons and interactions.
- Added amount field for item conditions to allow checking for specific amounts of items.
- Added
Threshold Wardenas example NPC preset with various conditions and actions. - Added smaller bug fixes and optimizations related to dialog conditions and button states.
### 6.18.0
Note: This update changes the internal data format for conditions and actions, which may reset /
remove legacy existing execution-limit entries without stored IDs.
- Fixed #745 by adding conditions for actions to allow more complex and dynamic behavior.
- Fixed #652 by adding dialog button tooltip for longer texts.
- Fixed #687 by adding command value tooltip to show the full value.
- Added Experience Level conditions.
- Added Game-mode conditions.
- Added has item in inventory condition.
- Added has item in hand condition with (main hand and off-hand) support.
- Added player health condition.
- Added player tag condition.
- Added player team condition.
- Added Goldmere example NPC preset with various conditions and actions.
- Added negative condition support to allow negating conditions for more complex logic.
- Removed parameter pseudo IDs for
ActionDataEntryand replaced them with random UUIDs. - Refactored condition system to allow more condition types.
### 6.17.0
- Fixed #738 by adding additional tooltips for "Execute as player"
- Fixed to detailed logs by reducing log.info messages during startup and in-game.
- Added additional unit and game-tests.
### 6.16.0
- Fixed #732 by providing option to disable ESC key and close button for dialogs.
- Fixed #723 by avoid auto-close in specific cases like trading screens.
- Added general dialog configuration options to allow users to customize dialog behavior.
- Added avatar scaling and position offset options for dialogs.
- Added missing translation keys.
### 6.15.0 (Trades, Player Heads, Epic Fight and QOL updates)
- Fixed #731 by resyncing species data, if species list is empty on the client.
- Fixed #730 by improving Epic Fight integration and enabled experimental features.
- Fixed #729 by making sure trade uses are stored correctly.
- Fixed #728 by adding custom head support for player heads.
- Fixed #689 by showing remaining trade uses and allow resetting manually and automatically.
- Fixed #218 and #132 with new trade configuration screen and better support for custom trades.
- Fixed trade specific edge by switching between basic and normal/advanced trading mode.
- Fixed dialog button text is truncated with tooltip showing the full text.
- Fixed Cobblemon animation issues by syncing animation state with Cobblemon Animation System.
- Added per trade specific actions to allow users triggering actions after buys.
- Added trade reset button to reset all trades easily.
- Added trade usage information to trade configuration screen.
- Added experimental feature state to allow users to manually enable experimental features.
- Added Griselda Grindstone as example trader with actions.
- Cleanup test files.
### 6.14.0 (Cobblemon Support and Dialog Improvements)
- Fixed #727 by making sure changes are synced to the client when changing values.
- Fixed #726 by adding additional allow lists for specific commands.
- Fixed #686, #389, #304, #211 by adding basic Cobblemon support with Cobblemon NPC.
- Fixed dialog misalignment and navigation issues by adjusting dialog sprites and screens.
- Fixed x and z root rotation by correcting rotation logic and pivot calculations.
- Added basic Cobblemon support with custom NPC type and model for testing.
### 6.13.0 (Security and Permissions Updates)
Notes: This update includes better security checks and permissions for multiplayer environments. It
allows to execute server commands which can be potentially dangerous if used with malicious intent.
- The update splits the model root data and logic from the rest of the model part data and logic,
- Fixed #725 by separating model root data and logic from the rest of the model part data and logic.
- Fixed #722 by supporting .sbnt files as local presets.
- Fixed #675 by adding dedicated assets for dialog and config screen backgrounds.
- Fixed #605, #532, #529 with new security checks and permissions system.
- Fixed #469, #311 by adding experimental api documentation and examples for custom model support.
- Fixed double rendering of config screen background by removing redundant background rendering.
- Fixed Ghast hitbox and name tag position issues by adjusting bounding box.
- ⚠️ Added security checks to prevent potential exploits and allow safe usage in multiplayer
- Replaced dynamic dialog screen background with a static one for better performance, customization
- Replaced dynamic config screen background with a static one for better performance.
- Refactored config-ui specific components and removed them from the core mod.
- Removed duplicated sprite sheets.
- Prepare permission system for possible Luck Perms integration in the future like #712.
- General code cleanup and optimizations related to config screen rendering and assets.
### 6.12.0
- Fixed #714 by adding additional checks for custom model part list based on vanilla models.
- Fixed #713 by reducing log verbosity with downgraded per-NPC INFO messages to DEBUG and
- Fixed #711 by reduced oversized startup/config log output.
- Fixed NBT validation guard to prevent unnecessary buffer allocations in production.
- Added model part name constants to EasyNPCModelManager for consistent usage across mixins.
- Improved RenderEntityTypeSupportConfig by enhancing filter logic and optimizing data structures
- Removed verbose debug logs that dump large data structures.
### 6.11.0
- Fixed #703 rendering issue with new custom layer system and hand renderings.
- Fixed #701 by adding additional safeguards and logging for invalid trading offers.
- Fixed smart animation not working properly with modified head position.
- Fixed head tracking by moving player detection back to server side-only.
- Fixed CustomLookAtPlayerGoal to better handle edge cases and reduce jitter.
- Fixed issue with Doppler NPCs keeping their hand inventory.
- Improved PoseManager logging message.
- Updated logo with a new design.
### 6.10.0
- Fixed #695 by clearing model part rotations/positions when switching to a
DEFAULTvanilla pose. - Fixed #695 by applying lock rotation and pose animation only when the NPC is idle.
- Fixed #695 by correcting root rotation pivot to use actual bounding box height instead of 0.5f.
- Fixed multiple objective registration issues including inverted
isTargetedPlayercheck, wrong
targets.
- Fixed goal reference being retained after objective is unregistered.
- Removed auto-lock of ROOT rotation when loading poses; root lock is now user-controlled.
- Added lock rotation checkbox to the advanced and custom pose configuration screens.
- Added model-specific pose key filtering in
ConfigurationMenuHandlerfor the default pose screen. - Added unit tests for
CustomPosition,CustomRotation,CustomScale,ModelPose,
ModelAnimationBehavior and ModelAnimationData.- Added
NPCDataIsolationTestHelperand game tests for Fabric and Forge. - Increased max head yaw range from 60° to 65°.
### 6.9.0
- Fixed #692, #666 by adding caching and safeguards to prevent redundant retriggering of NPC entity
- Fixed #651, #617 by adding basic custom poses for all supported NPC types.
- Fixed #597 by adding additional Flee goals for fleeing from players, villagers, monsters, ...
- Fixed pose loading to read directly from mod resources instead of copying files to disk.
- Fixed duplicate
saveNPCcalls on entity join by checking existing registry entry first. - Added
despawnandspawncommands to remove and re-spawn NPCs by UUID with configurable removal
- Added
ModelPoseAPIandEasyNPCEntityHandlerpublic API classes for controlling NPC poses and
- Added pose data files for all supported NPC types.
- Added lock rotation checkbox to the basic pose configuration screen.
- Added
MoveToPositionGoalto move an NPC to a position before executing a callback action. - Added
EasyNPCLookControlandEasyNPCBodyRotationControlto respect locked root rotation. - Added synced owner change and dimension change to the NPC entity data index.
- Added EasyNPCItemAttachmentLayer into various entity renderers.
- Added dedicated
Flee Objectiveconfiguration tab with objectives for fleeing creepers, monsters,
- Added
FOLLOW_ITEMobjective to the follow objectives tab to make NPCs follow item entities by
minecraft:apple).- Added
LookAtEntityByUUIDGoaland enabled the look-at-entity-by-UUID and look-at-owner objectives
- Added
persistentflag toSynchedDataIndexso that transient indices (e.g. crossbow charge,
- Added configurable
customParticlesEnabledflag toSlimeBasefor API consumers. - Added
SoundType.PETand mappedCAT_PURRto the cat NPC for tamed ambient sound variety. - Reduced log verbosity for periodic NPC save operations from INFO to DEBUG.
### 6.8.3
- Fixed #680 by enforcing version miss-match by upgrading network protocol version.
- Fixed #679 by resetting position, rotation and size for name tag.
- Fixed #665 by adding multi state slide for root rotations.
- Fixed #664 by adding option to disable following mouse cursor for easier posing.
- Fixed #663 by improve support for X and Z root rotations.
- Fixed #661 by adding quick rotation with NPC wand and sneaking to the NPC to rotate the root to
- Fixed move tool is wrongly triggering interactions by adding check for move tool in interaction
- Fixed Preset Item is wrongly triggering interactions by adding check for preset item in
- Fixed Slime and Ghast hitbox and name tag position issues by adjusting bounding box and eye height
- Fixed Slime and Ghast GUI position by adjusting offset values.
### 6.8.2
- Fixed #677 by extending
SafeMerchantDatawith notifyTrade to avoid crashes. - Added progression data support for leveling up NPCs based on player interactions and actions.
- Added global NPC tracking system for better management and debugging of NPCs across the world.
- Added
OriginalModelConfig.withVariantTexture()option to allow using variant textures with the
### 6.8.1
- Fixed #676 by using existing preset helper method instead of custom one.
### 6.8.0 (Adding API support)
- Fixed #667 by adding warning messages and additional checks for invalid network packets.
- Fixed Horse spawn eggs model.
- Fixed pose support for allay, chicken, creeper, fox, ghast, horse, illager, iron golem, slime and
- Added NPC base classes for better API support.
- Added NPC raw classes for advanced API support.
- Added Slim and Ghast NPC types.
- Added Custom Model API for easier integration with other mods and custom models.
- Refactored internal data handling and registration for better maintainability and future
### 6.7.1
- Fixed #657 and #656 by adding additional client side checks for vanilla bug.
### 6.7.0
- Fixed #650 by implementing Wolf Leg Animations in setupAnim method.
- Fixed #648 by fixing canBeHitByProjectiles translation.
- Fixed #645 by adding
allowBypassInvulnerabilityconfig option to allow/deny bypassing
- Fixed delete button showing label even with small width.
- Fixed up and down buttons not positioned correctly in some cases.
- Fixed name tag showing up for dialog and configuration UI.
- Fixed distance action issue were multiple actions are not properly triggered.
- Fixed issues with NPC presets.
- Fixed Cat NPC and Wolf NPC owner data not syncing properly.
- Added preset browser for easier selection of common NPC presets.
- Added preset .snbt (text) export and import functionality for sharing NPC presets.
- Refactored existing NPC presets to use new .snbt format.
- Refactored spawner system to use new preset format for better maintainability and future
### 6.6.2
- Fixed #643 by rework scaling system.
- Fixed scaling not properly updating hitbox and nametag position after restart / reload.
- Added MID and MOUSE_OVER name tag visibility modes for finer control over NPC name display.
- Added team-based name tag visibility support respecting vanilla Team.
### 6.6.1
- Fixed #638 by refactored internal data handling for display attributes.
### 6.6.0
- Fixed #634 by implementing asynchronous texture loading with dedicated thread pool.
- Fixed texture loading blocking render thread causing game freezes.
- Fixed race conditions in texture reload protection using atomic operations.
- Fixed resource leaks in HTTP connections during remote texture downloads.
- Fixed URL validation spam allowing multiple simultaneous downloads of the same texture.
- Fixed exception handling for remote image validation preventing crashes on invalid URLs.
- Fixed
defineId called for:warning messages during NPC loading. - Refactored texture loading architecture with multi-level defense and rate limiting.
- Refactored entity data registration logic for better maintainability.
- Converted data classes to modern Java records for better immutability and thread-safety.
- Added thread-safe session server spam protection with ConcurrentHashMap.
- Added comprehensive error recovery with automatic cooldown reset on failures.
- Improved texture loading with 2-thread pool and 500ms rate limiting.
- Improved exception handling with specific catch blocks for IIOException and FileNotFoundException.
### 6.5.2
- Fixed Villager profession and job skin issue.
- Improved GitHub workflows by adding cache for gradle dependencies.
- Improved Gradle build time and cleanup tasks.
### 6.5.1
- Fixed #632 by implementing ON_KILL action type and event.
- Fixed #629 by improving texture handling performance, caching, and memory usage.
- Fixed kill command is not working on NPCs.
- Fixed texture reload protection preventing cache reload after eviction.
- Fixed WebP validation bug in remote image validator (missing return statement).
- Refactored texture handling logic for better maintainability and future improvements.
- Added time-based reload protection (60 seconds) to replace permanent blocking mechanism.
- Added additional unit tests for texture handling.
- Improved gradle build tasks.
### 6.5.0
- ⚠️ Removed jar-in-jar bundle approach for better mod compatibility and api capabilities.
- Fixed #627 scissor implementation for better compatibility with other mods.
- Fixed #625 lively animation issues when using rotated or moved model parts.
- Fixed default animation are canceled when using scaled model parts.
- Added better pose animation control with smart, default und none options.
### 6.4.1
- Fixed #626 screen switching logic for different NPC UUIDs, thanks to
Spawnbladefor the detailed
### 6.4.0
- Fixed #626 by improving dialog data validation and error handling.
- Fixed #623 by refactoring render data and render handling.
- Fixed #622 by making sure custom data are properly saved and loaded.
- Fixed open dialog action type to allow opening dialogs from other NPCs.
- Fixed hashing issues by adding missing equals and hashCode methods for ConditionDataSet and
- Added custom data test item for #622 and easier testing of custom data.
- Improved records and fixed potential issues with missing data.
### 6.3.0
- Refactored config ui specific components and removed them from the core mod.
- Fixed dialog data by filtering dialog data before sending to the client.
- Fixed dialog editor layout issues and improved usability.
- Fixed missing default values for some dialog data fields.
- Added dialog priority support to control the order of dialog execution.
- Added condition support for dialog and scoreboard actions.
- Added frequency support for dialog to limit how often an dialog can be shown.
- Added new NPC preset to for scoreboard and condition support.
- Improved dialog button data format by removing redundant fields.
### 6.2.0
- Fixed string injection within dialogs.
- Fixed missing translation for action types.
- Added scoreboard action type to increase, decrease, set scoreboard values.
- Added
@score(...)NPC macro to display scoreboard values in the dialog. - Added additional unit tests.
- Improved spin button with indicators and better usability.
### 6.1.2
- Fixed container and menu sync issues with missing close container packets.
- Fixed close button not working in some cases.
- Fixed jumping mouse cursor between screen transitions.
- Fixed translation files and removed duplicate and deprecated entries.
- Moved Easy NPC wand to existing core item tab instead of creating a new one.
- Added cat pose support for different model parts (except tail).
- Improved EasyNPCWand glowing effect performance by disabling it when not needed.
- Improved custom entity detection by excluding non-living entities like displays, makers, throwns
- Improved cat variant handling.
### 6.1.1
- Fixed #612 by re-validating entity types.
- Fixed #610 by force sync of hat and head layers for specific models.
- Fixed orc textures.
- Improved custom model support and performance, by moving related logic into to client side only.
- Improved caching of player to UUID mappings for player skins.
- Limited change model commands and logic to Doppler NPCs only.
### 6.1.0 ✨
This is a major release. Please back up your worlds and NPC data before updating. This version
contains many improvements, optimizations, and internal changes that are **not fully compatible**
with earlier releases.
⚠️ Breaking changes
- Existing NPCs and their configuration data from versions before 6.1.0 may not load correctly or
- Internal data formats and some behaviors have been refactored to support new use-cases.
🧩 New modular structure
Easy NPC is now split into three separate mods:
- Easy NPC** – Bundle that includes both Core and Configuration UI for a plug‑and‑play experience.
- Easy NPC: Core** – Lightweight runtime and logic for NPCs, with minimal dependencies. Intended
- Easy NPC: Configuration UI** – Standalone configuration interface for creating and editing NPCs.
🎯 Why this change?
- Allows servers and modpacks to ship only the **Core** mod on the server side for a leaner setup.
- Reduces memory usage and load times when the UI is not required everywhere.
- Makes development and testing faster by separating UI and core logic.
[history]: https://github.com/MarkusBordihn/BOs-Easy-NPC/commits/
[upgrade_guide]: https://github.com/MarkusBordihn/BOs-Easy-NPC/wiki/Upgrading
## Note
This change log includes the summarized changes. For the full changelog, please go to
the [GitHub History][history] instead.
Note: Please always back up your world / NPCs before updating to a new version!
Check the [upgrade guide][upgrade_guide] for more information.
### 7.15.0
- Fixed #838 by keeping preset imports silent when run through
/executeor command blocks. - Fixed #380 by applying the NPC limit to the default spawner as well.
- Fixed #849 by allowing resource pack sounds in the sound configuration.
- Fixed #349 by no longer spawning NPCs left-handed at random.
- Fixed #851 by locking dialog buttons per dialog, not across dialogs with the same label.
- Fixed deleted or duplicated NPCs returning, memory leaks and several owner and UI issues.
- Fixed the Epic Fight Wither Skeleton NPC missing its Epic Fight mob patch.
- Changed requirements: same mod version on client and server, Easy Model Entities 2.5.0+.
- Changed backups of all worlds and killed NPC data to expire after 30 days, see
storage.cfg. - Added "Jump", "Assist Owner" and "Follow Nearest Player" to fix #845, fix #310, fix #761.
- Added an NPC inventory with item pickup and death drops to fix #111, fix #197, fix #543, fix #670.
- Added "Sit on Shoulder", a boss bar and
/easy_npc debug core loglevelto fix #577, fix #219. - Added the "Hold" animation mode, a "Bank Teller" preset and new API methods for addons.
### 7.14.0
- Fixed #846 by keeping custom poses for players who start seeing the NPC later.
- Fixed attribute and trading settings missing for players who start seeing the NPC later.
- Fixed changed max uses, XP and trading type not shown in the trading screens until reload.
- Fixed
/easy_npc sound setchanges not reaching players until the NPC was reloaded. - Added game tests that check NPC poses and settings after respawns and for new players.
### 7.13.0
- Fixed color and formatting tags in dialog button names showing as plain text.
- Fixed the button preview in the editor showing lowercase names as a raw translation key.
- Fixed the "Move EasyNPC" item not working for NPC owners outside of creative mode.
- Fixed
/easy_npc owner setreporting success even when the owner could not be changed. - Fixed the game crashing when the URL or player skin screen showed a skin download error.
- Fixed the preset browser search showing no results after scrolling down the list.
- Changed the network protocol version, so client and server must run the same mod version.
- Added
@initiator,@npcand@score()support to dialog button names to fix #841. - Added automatic client tests with the Client Runtime Interface Toolkit.
- Larger core refactoring and code cleanup.
### 7.12.2
- Fixed the Fairy hitbox being far too small, so its name tag and speech bubble sat in its body.
- Fixed scaled NPCs keeping their old hitbox and eye level, so hits, clicks and looking missed.
- Fixed malformed network packets disconnecting players instead of being ignored.
- Fixed invalid NPC positions, scales, attributes, names and durations from being applied.
- Changed Fairy NPCs to take up the space of their model, so they collide and can be clicked.
- Changed the network protocol version, so client and server must run the same mod version.
### 7.12.1
- Fixed #836 by always showing "Restore", including datapack presets, with a reason tooltip.
- Fixed preset import and export messages missing, wrong or not warning about replaced NPCs.
- Fixed the preset browser reloading on each keystroke, leaking NPCs and clearing the selection.
- Fixed the preset list sorting, filter order and layout clipping options in small windows.
- Fixed
/easy_npc preset import datawithout a position importing it as a default preset. - Fixed spawn rate limit leaks, unstable preset IDs and "Spawn New" stacking NPCs on one spot.
- Changed "Restore" to refuse instead of spawning a copy when it is not permitted.
- Added sorting, a match count, reload, auto-close, the NPC ID and tooltips for presets and skins.
- Added
matching <pattern>batch imports with limits, a confirmation and a clickable position.
### 7.12.0
- Fixed #833 by showing Easy NPC Wand outlines only to the wand holder, owner and admins.
- Fixed #834 by adding "Set Home Here" and "Reset Home" buttons to the position configuration.
- Fixed #835 by keeping the NPC ID and position in exported presets, so imports restore the same
- Fixed preset imports and spawn eggs losing the owner's list entry and owner objectives.
- Fixed NPCs restored from an automatic backup losing their owner and becoming ownerless.
- Fixed selection lists showing only their first six entries and hiding the rest.
- Changed importing a preset to update the original NPC at its stored position instead of adding a
- Changed completed trades to play the "Trade completed" sound, which stayed silent before.
- Changed the API dialog call to report an unknown dialog label instead of always reporting success.
- Changed NPCs without arms to carry held items at the head or body instead of hiding them.
- Changed the optional Easy Model Entities dependency to require version 2.4.0 or newer.
- Added a "Sound" configuration with sounds for dialogs, speech, swimming, eating and fall damage.
- Added a searchable sound selection with volume and pitch sliders to the "Sound" configuration.
- Added a "Block Vehicles" option to keep NPCs out of boats, minecarts and modded chairs.
- Added the profession selection to all skin configurations and a new built-in skin per NPC type.
- Added client settings to hide name tags behind walls and
highlightEnabledfor wand outlines. - Added an "Exists" condition operation and API access to NPC movement, actions and presets.
### 7.11.0
- Fixed #828 by no longer freezing the server on logout when NPCs follow or watch the player.
- Fixed #831 by moving routine NPC removal messages to the debug log.
- Fixed #832 by making humanoid NPCs ignore custom player models, animations and poses.
- Fixed hourly NPC backups stuttering on large worlds and retaining timestamps of removed NPCs.
- Fixed owner-login restoration duplicating, repeatedly restoring, reviving or moving unloaded NPCs.
- Fixed NPC index and file synchronization issues causing lost NPCs, crashes or false warnings.
- Fixed stale NPC data after unloading, avoided redundant writes and added repeated-unload warnings.
- Fixed the preset browser failing to list custom and world presets saved in the SNBT format.
- Fixed speech bubbles losing their text and turning translucent with Iris shaders.
- Fixed text formatting and macro parsing for translated speech bubbles and mod API texts.
- Added
minLightLevelto keep speech bubbles readable in dark surroundings.
### 7.10.0
- Fixed #829 by allowing bats and other non-walking mobs as the render entity of a Doppler NPC.
- Fixed the NPC name tag showing above the previews in the "Custom Models" configuration.
- Fixed speech bubbles being cut off by walls, doorframes and the NPC's own body.
- Changed overlapping speech bubbles to move apart and to stay visible when the NPC is off-screen.
- Changed "Navigation: Automatic" to use flying movement for NPCs rendered as a flying mob.
- Changed the render entity list to hide seats, paintings, thrown items and other non-mob entities.
- Added a "Min. hover height" slider for flying NPCs and client settings for speech bubbles.
### 7.9.0
- Fixed modded fish NPCs, like the ones of Tide 2, spinning around instead of swimming upright.
- Fixed "Navigation: Automatic" using ground movement for water NPCs and aquatic model NPCs.
- Fixed the "Random Swimming" objective never moving an NPC that uses aquatic navigation.
- Fixed a swimming NPC shaking or twitching in place instead of holding its tilt and swim depth.
- Fixed a swimming NPC turning in circles forever when it could not reach its next path point.
- Fixed an NPC that fell into water never getting out of it again.
- Fixed a following NPC searching a new path every tick while its target was unreachable.
- Fixed the "Move to" actions stopping short of a raised target or not starting while in the air.
- Fixed "Move back to Home" ignoring height differences and never returning from beyond 32 blocks.
- Fixed the "Opacity" input field being too narrow to show a value of 100.
- Fixed a damaged NPC with an Easy Model Entities model never flashing red.
- Changed modded water NPCs to swim level, vanilla water mobs keep their tilt as before.
- Changed the "Move to" actions to walk up to 48 blocks and to teleport only beyond that range.
- Changed "Move to" and "Move back to Home" to give up after three seconds without progress.
- Changed the timeout of a "Move to" action to count real ticks, it ran twice as long before.
- Changed a new "Random Swimming" objective to rank below following, fleeing and attack goals.
- Changed "Opacity" of an NPC with an Easy Model Entities model to be applied by that mod itself.
- Changed the minimum Easy Model Entities version to 2.3.0, older versions disable the integration.
- Added "Depth below surface" and "Height above floor" sliders for the swim level of an NPC.
- Added log entries for the NPC files written on a world save, with a warning above 250 ms each.
### 7.8.1
- Fixed #827 by rendering fish NPCs in water upright instead of always flopping on their side.
- Fixed #828 by keeping a damaged NPC from blocking the world save, it now falls back to defaults.
- Fixed a restored NPC picking up a random preset ID that changed with every save.
- Changed NPC data to only be written to disk when it actually changed.
### 7.8.0
- Fixed smaller text and UI issues.
- Changed an NPC that is already standing at its target position to finish the movement right away.
- Changed the "None" skin tab to "Advanced", which now holds "Disable Skin" and the texture field.
- Added a "Move to" action, which sends an NPC to a position, a player, its owner or its home.
- Added a "Move to and Wait" action, which runs the following actions only after the arrival.
- Added an arrival radius, a timeout and an optional teleport to both move actions.
- Added an "Opacity" attribute from 0 to 100, which fades body, armor and hand items together.
- Added a "Set Opacity" action, which turns an NPC into a ghost or hides it completely.
- Added the "Lantern Wraith" preset, a ghost walking a square with a short line at every corner.
- Added API access to the move actions and the opacity of an NPC.
- Added a "Resource Location" skin type, which renders any texture of a mod or a resource pack.
- Added an "Advanced" skin tab, which previews the NPC with the entered texture before applying it.
### 7.7.7
- Fixed #821 by keeping the transparency of 64x64 skins, which Fresh Moves needs for its eyes. Skins
- Fixed #818 by running trade actions for Villager and Wandering Trader NPCs as well.
- Fixed a dialog with several text variants switching its speech bubble size every second.
- Fixed the skin cache storing the processed image instead of the original download.
- Fixed the untranslated interval names, like
PER_DAY, of the "Execution Limit" condition. - Fixed the
sitanimation of Easy Model NPCs, which never used the built-in sitting pose. - Fixed the speech bubble being cut off by the head of an NPC when a player stood close to it.
- Changed speech bubbles to keep their screen size and to move down or aside when a player is close.
- Changed the speech bubble text to render 20% larger than a name tag.
- Changed a time based action set with a "Wait" action to run in order instead of picking one entry.
- Changed dialog texts to wrap later, so an existing dialog can switch to the wider screen layout.
- Changed fallback actions to skip screen actions without a player, like the regular actions do.
- Changed the minimum Easy Model Entities version to 2.1.0, older versions disable the integration.
- Added a "Wait" action, which pauses the following actions of an event for a chosen duration.
- Added the "Countdown Timekeeper" preset, a speech bubble count to ten ending in sound and sparks.
- Added scaling and rotation for Doppler NPCs behind the "Experimental Features" checkbox. Both only
- Added a "Sound" action, which plays a sound at the NPC with sound category, volume and pitch.
- Added "Every 5 Minutes" and "Every 15 Minutes" to the "Execution Limit" condition.
- Added a "Player Idle" condition, which checks how long a player has not moved.
- Added an "Immovable" attribute, which keeps an NPC in place against pushing and knockback.
- Added
/easy_npc pauseto pause a single NPC or all NPCs; the global pause ends with the server. - Added API access to the sound action, the pause state and the idle time of a player.
- Added a texture override per model slot for Easy Model NPCs over
/easy_npc render texture. - Added a "Repeat" playback mode with a count and a time limit to the "Play Animation" action.
- Added API access to animation variants, texture slots and textures of Easy Model NPCs.
### 7.6.0
- Fixed unclear mod conflict errors for duplicate entity data tracker IDs.
- Fixed third-party health bars rendering over NPC previews in configuration and dialog screens.
- Fixed Doppler and Easy Model Entities NPCs using default hitboxes instead of their model size.
- Fixed the
/easy_npccommands suggesting no NPC UUIDs at all on a server. - Fixed the pose list of the "Set Pose" action drawing over its input field.
- Fixed the untranslated "Loop", "After current" and "Action Data Type" labels of the action editor.
- Fixed the missing hint text of the "Chance" condition.
- Fixed long condition hints running out of the editor screen instead of wrapping.
- Fixed the misaligned help icons and text buttons of the "Message" action.
- Fixed changes to the "Set Pose", "Play Animation" and "Stop Animation" actions not being saveable.
- Fixed the speech bubble text sitting closer to its upper border than to its lower one.
- Changed the NPC suggestions to list the crosshair NPC first and only own NPCs without permissions.
- Changed a preset export to only store what differs from a new NPC, without position or owner.
- Changed a preset without objectives or actions to fall back to the defaults of its NPC type.
- Changed events without a player, like "On Spawn" or "On Kill", to check their conditions. An
- Changed a time based action to pick the owner as
@initiatorwhenever the owner is nearby. - Changed speech bubbles to stay visible from 5 up to 18 seconds, depending on the text length.
- Changed the "Set Pose" action to only show its input field for the "custom" pose entry.
- Added time based actions on five fixed steps, from every ~1 second up to every ~15 minutes.
- Added a "Message" action for chat, system message and speech bubble text without a command.
- Added text variants, a sender name, a recipient and translation keys to the "Message" action.
- Added the speech bubble graphic as
easy_npc:textures/gui/speech_bubble.pngfor resource packs. - Added a "Chance" condition in percent and a "Relationship" condition for owner and faction.
- Added spawn, owner login, state change, day / night, weather and the missing "On Trade" events.
- Added a base preset per NPC type under
easy_npc:api/preset/base/, usable as a parent preset. - Added the "Wandering Companion" preset, a talkative NPC built from time based messages.
- Added an action registry, an action handler, a preset validator and richer event data for mods.
- Added a tooltip with name, type and distance to every NPC suggestion of the
/easy_npccommands. - Improved the NPC suggestions, which appear without typing and tolerate a near miss of one block.
### 7.5.0
- Fixed #814 by giving every Cobblemon NPC its own animation state instead of one per species.
- Fixed #813 by letting "Move back to Home" work at any distance instead of only near its home.
- Fixed #812 by checking once per session whether a player changed their skin.
- Fixed #810 by accepting Cobblemon aspects of resource packs instead of only "shiny" and "female".
- Fixed NPCs losing their owner, home and "No Gravity" setting after a respawn or a preset import.
- Fixed objectives keeping a gone target and being switched off when their target or mod was gone.
- Fixed flying NPCs like Allay, Vex and Ghast moving on the ground instead of flying.
- Fixed dialog, button, preset, pose and texture names with duplicates or special characters.
- Fixed conditions not being editable on a dedicated server and untranslated condition texts.
- Fixed Easy Model Entities NPCs not turning their head and their model list ignoring a
/reload. - Changed the movement objectives to a fixed order: flee, follow, return home, then stroll. NPCs
- Changed datapack presets to
easy_npc/preset/, the old folder still works, but only for easy_npc. - Changed the required Easy Model Entities version to 1.7.0, floating models now hover by default.
- Removed the experimental user-defined NPCs and the unused
SERVER_SKINskin type. - Added NPC states with number, yes/no and text values, usable as condition, action and command.
- Added a "Navigation" and a "Hover height" setting to switch any NPC between ground and flying.
- Added parent presets, presets from other mods, a preset visibility and the "Forge Keeper" preset.
- Added custom conditions, events, an NPC identifier and more objective options for other mods.
- Added "On Far Distance" at 32 blocks and an option to spawn an NPC again when its owner logs in.
- Improved flying navigation and third party support with an API for presets and own objectives.
### 7.4.0
- Fixed #807 by no longer pulling every same-type NPC within 32 blocks into a "Defend Self" fight.
- Fixed #805 by evaluating all visibility settings together instead of stopping at the first one.
- Fixed #804 by keeping the custom name on Doppler NPCs for name based textures and the name tag.
- Fixed #803 by adjusting assets to match typical Minecraft style instead of generic UI style.
- Fixed the day and night detection, which counted sunrise as night and sunset as day.
- Fixed the visibility in the Nether and the End, which used the Overworld time.
- Fixed the time and game mode visibility checkboxes appearing in a random order.
- Fixed game tests only being able to fail on their first assertion, which hid later failures.
- Fixed the "Saddled" horse skin variants, which never showed a saddle.
- Changed "Visible to Owner" and "Visible to Team" to also follow day, night and game mode.
- Changed Evoker, Illusioner and Vindicator variants without "Crossed Arms" to keep their arms down.
- Added a "Defend Faction" objective that attacks whoever hurt a nearby faction member or player.
- Added a system message when faction members fight each other and the faction stays out of it.
- Added a head equipment slot for Illagers so their captain banner can be removed or swapped.
- Added a day and night preview to the display configuration screen.
- Added unit and game tests for the visibility attributes and the faction defense.
- Improved the visibility check performance by reading the display attributes only once per check.
- Improved display attributes from older versions by completing them with their defaults.
- Improved the attack objective screen by disabling "Protect Owner" and "Defend Faction" when unset.
### 7.3.0
- Improved skin variants by carrying their data as typed fields instead of parsing variant names.
- Centralized the Cobblemon mod id and default model on shared constants.
- Reduced duplicated enum code with a shared
EnumUtilshelper forget(String)lookups. - Optimized villager profession and type lookups to use direct registry keys instead of scans.
- Optimized enum name lookups by caching tag names, ids and keys once at construction.
- Added unit and game tests for skin variants, villager resolution and the enum helper.
### 7.2.0
- Fixed #801 by using combination for NPC, Dialog and Action UUIDs to avoid collisions for action
### 7.1.1
- Fixed #800 by lazy loading entity types.
### 7.1.0
- Fixed #799 by fixing edge cases and adding additional documentation and better log messages.
- Fixed #798 by considering console, commands and command blocks as trusted command sources.
- Fixed a critical single-player / LAN issue where client and server NPCs shared the same registry.
- Fixed a memory leak in the configuration menu handling and added timeout and disconnect cleanup.
- Fixed duplicate downloads when several NPCs request the same skin at the same time.
- Fixed skin lookups failing after a error so a slow server no longer freezes the game.
- Fixed the URL skin screen freezing the game while checking a remote image; the check now runs in
- Added a new World Spawner block that limits an NPC preset across the whole world (all dimensions);
- Hardened remote skin downloads with a strict size limit and safe redirect handling to prevent
blockPrivateAddresses setting.- Improved server performance by only sending entity and player load events to NPCs that actually
### 7.0.0
- Fixed #791 by adding Wandering Trader NPC type.
- Fixed #788 by extending the AI safeguards to Epic Fight and raw NPC variants (Piglin, Villager,
- Fixed #787, #531, #237 and #184 by adding a faction system with
/easy_npc factioncommands,
- Fixed #787, #771 and #572 by adding a new
targetobjectives tab to attack hostile factions or
- Fixed #786 by adding gender and shiny model variants for Cobblemon NPCs, searchable via
female
shiny in the model selection.- Fixed faction combat between invulnerable NPCs by adding the new
Attackable by Factionscombat
- Fixed Cobblemon model selection previews for oversized species by scaling with Cobblemon's own
- Fixed faction management edge cases by validating faction names, sorting faction lists and
- Fixed custom skin reloads by loading and clearing texture caches per skin model instead of always
- Improved the
Attackable by Players/Monsters/Factionscombat attributes to work independently of
Invulnerable, each opening a targeted hole for its own attacker group.- Improved preset command and network handling by splitting the large handlers into smaller focused
- Added Easy Model Entities Support.
- Added faction manager and faction editor screens to create, color and delete factions and manage
FACTION_MANAGEMENT security feature.- Added new
Miscattributes tab as home for the NPC faction assignment. - Added reusable warning and help icon components for inline hints with tooltips.
- Added additional unit and game tests for factions, target objectives and Cobblemon model variants.
### 6.25.0
- Fixed #780 by adding additional caching and optimization for remote texture downloads.
- Fixed #767 by safeguard attribute sliders against astronomical values from other mods.
- Fixed #754 by adding custom data item matching for NPCs with actions and conditions.
- Fixed texture manager running in the wrong thread may cause crashes and deadlocks in >= 1.21.x.
- Fixed issue with empty UUID for action conditions causing unintended behavior.
- Fixed execution limit reset for actions.
- Added Texture registration queue to avoid multiple simultaneous downloads in the same tick.
- Added NPC coin, key and red token as consumable items for NPCs with actions and conditions.
- Added
Welcome Coin Traderas example NPC preset with custom coin, key and red token as example
- Added general safeguard for attributes against astronomical values from other mods.
- Increased fallback max health value from 1024 to 4096 to allow for more complex NPCs.
- Improved texture manager and eliminated duplicated texture checks and registrations.
### 6.24.0
- Fixed #459, #775 by adding an option to block interactions with invisible NPCs.
- Fixed #774 startup crash related to optional Epic Fight and Cobblemon entity type maps.
- Fixed #773 by checking timed trade resets during base ticks and before opening trade screens.
- Fixed trade reset timing by increasing internal tickers correctly.
- Added time of day and weather conditions for #459.
- Added additional unit and game tests for trade resets, ticker handling and entity attributes.
- Added
Skywatch Scoutas example NPC preset with time of day and weather conditions.
### 6.23.0
- Fixed #772 by adjusting texture retries with 403 and 404 errors and lowering logging.
- Fixed #770 item rendering for Epic Fight NPCs (Evoker, Pillager, Vindicator and humanoid skins).
- Fixed #769 door loops with NPCs not reliably opening or closing doors.
- Fixed #760 by adding a dialog option and config setting (buttonConditionMode: LOCK or HIDE) to
- Fixed #709 by adding color picker popup for names with 32 colors and/or a manual RGB/hex value.
- Fixed NPC name color being reset when renaming without a specified color by preserving the
- Improved the door movement attributes so "Pass Door" is automatically enabled while "Open Door"
### 6.22.0
- Fixed #766 by passing the full server player context to command execution for better compatibility
- Fixed #764 by adding entity health, npc health conditions and NPC preset
Grukk, the Sparring Post as example for using these conditions.- Fixed #763 by making sure dialog button execution limits are now recorded.
- Fixed #758 by providing a example NPC preset named
One Wish Companion. - Fixed crashes related to 3rd party villager AI reading non-registered brain memories on Easy NPC
- Fixed Dialog buttons are not locked for server-side data as preparation for #760 and #644.
- Fixed #628 by adding conditional dialog opening support / command for better control over when
- Added brain AI for Piglin and Piglin Brute NPCs and registered the full vanilla brain memory set.
- Added additional guns to the gun tag for #757.
- Added a new "Open Dialog (Conditional)" action that opens a named dialog only if its conditions
- Added new entity health and npc health conditions for actions, dialogs and dialogs buttons.
- Added Piglin, Piglin Brute and Zombified Piglin NPCs invulnerable, for consistency with other
- Added a new "Knockback Immunity" combat attribute that prevents the NPC from being knocked back by
- Added a new "Explosion Immunity" combat attribute that makes the NPC immune to explosion damage
- Moved the "Projectile Collision" attribute to the Combat attribute screen, where it fits better
### 6.21.0
- Fixed item attachment for Illagers in crossed-arms pose.
- Fixed broken illager crossbow attack goal.
- Fixed crashes related to 3rd party items which are not renderable as hand items #756.
- Fixed crashes related to 3rd party mixins trying to access non-existing model parts #756.
- Fixed log.info spam message by reducing log verbosity and adding additional checks for custom
- Improved EasyNPCModelManager performance.
- Refactored NPC renderers to remove default hand item layer.
### 6.20.0
- Fixed crashes related to 3rd mods trying to access non-existing NPCs goals.
### 6.19.0
Note: This update adjusted the dialog background images by 10x6 pixels, which may require users to
adjust their custom dialog backgrounds if they are using custom ones.
- Fixed #752, #130 by adding dialog button condition support to allow to disable buttons.
- Fixed #683, #215 by adding typewriter effect support for dialog text.
- Fixed #690, #309 by allowing conditions for dialog, dialog buttons and interactions.
- Fixed smaller UI issues with dialog screen layout and background.
- Refactored dialog background images by 10x6 pixels on each side.
- Refactored dialog screen layout to better fit the new background size and improve appearance.
- Added typewriter effect and client configuration for dialog text.
- Added condition symbols to indicate the condition status for dialog, buttons and interactions.
- Added amount field for item conditions to allow checking for specific amounts of items.
- Added
Threshold Wardenas example NPC preset with various conditions and actions. - Added smaller bug fixes and optimizations related to dialog conditions and button states.
### 6.18.0
Note: This update changes the internal data format for conditions and actions, which may reset /
remove legacy existing execution-limit entries without stored IDs.
- Fixed #745 by adding conditions for actions to allow more complex and dynamic behavior.
- Fixed #652 by adding dialog button tooltip for longer texts.
- Fixed #687 by adding command value tooltip to show the full value.
- Added Experience Level conditions.
- Added Game-mode conditions.
- Added has item in inventory condition.
- Added has item in hand condition with (main hand and off-hand) support.
- Added player health condition.
- Added player tag condition.
- Added player team condition.
- Added Goldmere example NPC preset with various conditions and actions.
- Added negative condition support to allow negating conditions for more complex logic.
- Removed parameter pseudo IDs for
ActionDataEntryand replaced them with random UUIDs. - Refactored condition system to allow more condition types.
### 6.17.0
- Fixed #738 by adding additional tooltips for "Execute as player"
- Fixed to detailed logs by reducing log.info messages during startup and in-game.
- Added additional unit and game-tests.
### 6.16.0
- Fixed #732 by providing option to disable ESC key and close button for dialogs.
- Fixed #723 by avoid auto-close in specific cases like trading screens.
- Added general dialog configuration options to allow users to customize dialog behavior.
- Added avatar scaling and position offset options for dialogs.
- Added missing translation keys.
### 6.15.0 (Trades, Player Heads, Epic Fight and QOL updates)
- Fixed #731 by resyncing species data, if species list is empty on the client.
- Fixed #730 by improving Epic Fight integration and enabled experimental features.
- Fixed #729 by making sure trade uses are stored correctly.
- Fixed #728 by adding custom head support for player heads.
- Fixed #689 by showing remaining trade uses and allow resetting manually and automatically.
- Fixed #218 and #132 with new trade configuration screen and better support for custom trades.
- Fixed trade specific edge by switching between basic and normal/advanced trading mode.
- Fixed dialog button text is truncated with tooltip showing the full text.
- Fixed Cobblemon animation issues by syncing animation state with Cobblemon Animation System.
- Added per trade specific actions to allow users triggering actions after buys.
- Added trade reset button to reset all trades easily.
- Added trade usage information to trade configuration screen.
- Added experimental feature state to allow users to manually enable experimental features.
- Added Griselda Grindstone as example trader with actions.
- Cleanup test files.
### 6.14.0 (Cobblemon Support and Dialog Improvements)
- Fixed #727 by making sure changes are synced to the client when changing values.
- Fixed #726 by adding additional allow lists for specific commands.
- Fixed #686, #389, #304, #211 by adding basic Cobblemon support with Cobblemon NPC.
- Fixed dialog misalignment and navigation issues by adjusting dialog sprites and screens.
- Fixed x and z root rotation by correcting rotation logic and pivot calculations.
- Added basic Cobblemon support with custom NPC type and model for testing.
### 6.13.0 (Security and Permissions Updates)
Notes: This update includes better security checks and permissions for multiplayer environments. It
allows to execute server commands which can be potentially dangerous if used with malicious intent.
- The update splits the model root data and logic from the rest of the model part data and logic,
- Fixed #725 by separating model root data and logic from the rest of the model part data and logic.
- Fixed #722 by supporting .sbnt files as local presets.
- Fixed #675 by adding dedicated assets for dialog and config screen backgrounds.
- Fixed #605, #532, #529 with new security checks and permissions system.
- Fixed #469, #311 by adding experimental api documentation and examples for custom model support.
- Fixed double rendering of config screen background by removing redundant background rendering.
- Fixed Ghast hitbox and name tag position issues by adjusting bounding box.
- ⚠️ Added security checks to prevent potential exploits and allow safe usage in multiplayer
- Replaced dynamic dialog screen background with a static one for better performance, customization
- Replaced dynamic config screen background with a static one for better performance.
- Refactored config-ui specific components and removed them from the core mod.
- Removed duplicated sprite sheets.
- Prepare permission system for possible Luck Perms integration in the future like #712.
- General code cleanup and optimizations related to config screen rendering and assets.
### 6.12.0
- Fixed #714 by adding additional checks for custom model part list based on vanilla models.
- Fixed #713 by reducing log verbosity with downgraded per-NPC INFO messages to DEBUG and
- Fixed #711 by reduced oversized startup/config log output.
- Fixed NBT validation guard to prevent unnecessary buffer allocations in production.
- Added model part name constants to EasyNPCModelManager for consistent usage across mixins.
- Improved RenderEntityTypeSupportConfig by enhancing filter logic and optimizing data structures
- Removed verbose debug logs that dump large data structures.
### 6.11.0
- Fixed #703 rendering issue with new custom layer system and hand renderings.
- Fixed #701 by adding additional safeguards and logging for invalid trading offers.
- Fixed smart animation not working properly with modified head position.
- Fixed head tracking by moving player detection back to server side-only.
- Fixed CustomLookAtPlayerGoal to better handle edge cases and reduce jitter.
- Fixed issue with Doppler NPCs keeping their hand inventory.
- Improved PoseManager logging message.
- Updated logo with a new design.
### 6.10.0
- Fixed #695 by clearing model part rotations/positions when switching to a
DEFAULTvanilla pose. - Fixed #695 by applying lock rotation and pose animation only when the NPC is idle.
- Fixed #695 by correcting root rotation pivot to use actual bounding box height instead of 0.5f.
- Fixed multiple objective registration issues including inverted
isTargetedPlayercheck, wrong
targets.
- Fixed goal reference being retained after objective is unregistered.
- Removed auto-lock of ROOT rotation when loading poses; root lock is now user-controlled.
- Added lock rotation checkbox to the advanced and custom pose configuration screens.
- Added model-specific pose key filtering in
ConfigurationMenuHandlerfor the default pose screen. - Added unit tests for
CustomPosition,CustomRotation,CustomScale,ModelPose,
ModelAnimationBehavior and ModelAnimationData.- Added
NPCDataIsolationTestHelperand game tests for Fabric and Forge. - Increased max head yaw range from 60° to 65°.
### 6.9.0
- Fixed #692, #666 by adding caching and safeguards to prevent redundant retriggering of NPC entity
- Fixed #651, #617 by adding basic custom poses for all supported NPC types.
- Fixed #597 by adding additional Flee goals for fleeing from players, villagers, monsters, ...
- Fixed pose loading to read directly from mod resources instead of copying files to disk.
- Fixed duplicate
saveNPCcalls on entity join by checking existing registry entry first. - Added
despawnandspawncommands to remove and re-spawn NPCs by UUID with configurable removal
- Added
ModelPoseAPIandEasyNPCEntityHandlerpublic API classes for controlling NPC poses and
- Added pose data files for all supported NPC types.
- Added lock rotation checkbox to the basic pose configuration screen.
- Added
MoveToPositionGoalto move an NPC to a position before executing a callback action. - Added
EasyNPCLookControlandEasyNPCBodyRotationControlto respect locked root rotation. - Added synced owner change and dimension change to the NPC entity data index.
- Added EasyNPCItemAttachmentLayer into various entity renderers.
- Added dedicated
Flee Objectiveconfiguration tab with objectives for fleeing creepers, monsters,
- Added
FOLLOW_ITEMobjective to the follow objectives tab to make NPCs follow item entities by
minecraft:apple).- Added
LookAtEntityByUUIDGoaland enabled the look-at-entity-by-UUID and look-at-owner objectives
- Added
persistentflag toSynchedDataIndexso that transient indices (e.g. crossbow charge,
- Added configurable
customParticlesEnabledflag toSlimeBasefor API consumers. - Added
SoundType.PETand mappedCAT_PURRto the cat NPC for tamed ambient sound variety. - Reduced log verbosity for periodic NPC save operations from INFO to DEBUG.
### 6.8.3
- Fixed #680 by enforcing version miss-match by upgrading network protocol version.
- Fixed #679 by resetting position, rotation and size for name tag.
- Fixed #665 by adding multi state slide for root rotations.
- Fixed #664 by adding option to disable following mouse cursor for easier posing.
- Fixed #663 by improve support for X and Z root rotations.
- Fixed #661 by adding quick rotation with NPC wand and sneaking to the NPC to rotate the root to
- Fixed move tool is wrongly triggering interactions by adding check for move tool in interaction
- Fixed Preset Item is wrongly triggering interactions by adding check for preset item in
- Fixed Slime and Ghast hitbox and name tag position issues by adjusting bounding box and eye height
- Fixed Slime and Ghast GUI position by adjusting offset values.
### 6.8.2
- Fixed #677 by extending
SafeMerchantDatawith notifyTrade to avoid crashes. - Added progression data support for leveling up NPCs based on player interactions and actions.
- Added global NPC tracking system for better management and debugging of NPCs across the world.
- Added
OriginalModelConfig.withVariantTexture()option to allow using variant textures with the
### 6.8.1
- Fixed #676 by using existing preset helper method instead of custom one.
### 6.8.0 (Adding API support)
- Fixed #667 by adding warning messages and additional checks for invalid network packets.
- Fixed Horse spawn eggs model.
- Fixed pose support for allay, chicken, creeper, fox, ghast, horse, illager, iron golem, slime and
- Added NPC base classes for better API support.
- Added NPC raw classes for advanced API support.
- Added Slim and Ghast NPC types.
- Added Custom Model API for easier integration with other mods and custom models.
- Refactored internal data handling and registration for better maintainability and future
### 6.7.1
- Fixed #657 and #656 by adding additional client side checks for vanilla bug.
### 6.7.0
- Fixed #650 by implementing Wolf Leg Animations in setupAnim method.
- Fixed #648 by fixing canBeHitByProjectiles translation.
- Fixed #645 by adding
allowBypassInvulnerabilityconfig option to allow/deny bypassing
- Fixed delete button showing label even with small width.
- Fixed up and down buttons not positioned correctly in some cases.
- Fixed name tag showing up for dialog and configuration UI.
- Fixed distance action issue were multiple actions are not properly triggered.
- Fixed issues with NPC presets.
- Fixed Cat NPC and Wolf NPC owner data not syncing properly.
- Added preset browser for easier selection of common NPC presets.
- Added preset .snbt (text) export and import functionality for sharing NPC presets.
- Refactored existing NPC presets to use new .snbt format.
- Refactored spawner system to use new preset format for better maintainability and future
### 6.6.2
- Fixed #643 by rework scaling system.
- Fixed scaling not properly updating hitbox and nametag position after restart / reload.
- Added MID and MOUSE_OVER name tag visibility modes for finer control over NPC name display.
- Added team-based name tag visibility support respecting vanilla Team.
### 6.6.1
- Fixed #638 by refactored internal data handling for display attributes.
### 6.6.0
- Fixed #634 by implementing asynchronous texture loading with dedicated thread pool.
- Fixed texture loading blocking render thread causing game freezes.
- Fixed race conditions in texture reload protection using atomic operations.
- Fixed resource leaks in HTTP connections during remote texture downloads.
- Fixed URL validation spam allowing multiple simultaneous downloads of the same texture.
- Fixed exception handling for remote image validation preventing crashes on invalid URLs.
- Fixed
defineId called for:warning messages during NPC loading. - Refactored texture loading architecture with multi-level defense and rate limiting.
- Refactored entity data registration logic for better maintainability.
- Converted data classes to modern Java records for better immutability and thread-safety.
- Added thread-safe session server spam protection with ConcurrentHashMap.
- Added comprehensive error recovery with automatic cooldown reset on failures.
- Improved texture loading with 2-thread pool and 500ms rate limiting.
- Improved exception handling with specific catch blocks for IIOException and FileNotFoundException.
### 6.5.2
- Fixed Villager profession and job skin issue.
- Improved GitHub workflows by adding cache for gradle dependencies.
- Improved Gradle build time and cleanup tasks.
### 6.5.1
- Fixed #632 by implementing ON_KILL action type and event.
- Fixed #629 by improving texture handling performance, caching, and memory usage.
- Fixed kill command is not working on NPCs.
- Fixed texture reload protection preventing cache reload after eviction.
- Fixed WebP validation bug in remote image validator (missing return statement).
- Refactored texture handling logic for better maintainability and future improvements.
- Added time-based reload protection (60 seconds) to replace permanent blocking mechanism.
- Added additional unit tests for texture handling.
- Improved gradle build tasks.
### 6.5.0
- ⚠️ Removed jar-in-jar bundle approach for better mod compatibility and api capabilities.
- Fixed #627 scissor implementation for better compatibility with other mods.
- Fixed #625 lively animation issues when using rotated or moved model parts.
- Fixed default animation are canceled when using scaled model parts.
- Added better pose animation control with smart, default und none options.
### 6.4.1
- Fixed #626 screen switching logic for different NPC UUIDs, thanks to
Spawnbladefor the detailed
### 6.4.0
- Fixed #626 by improving dialog data validation and error handling.
- Fixed #623 by refactoring render data and render handling.
- Fixed #622 by making sure custom data are properly saved and loaded.
- Fixed open dialog action type to allow opening dialogs from other NPCs.
- Fixed hashing issues by adding missing equals and hashCode methods for ConditionDataSet and
- Added custom data test item for #622 and easier testing of custom data.
- Improved records and fixed potential issues with missing data.
### 6.3.0
- Refactored config ui specific components and removed them from the core mod.
- Fixed dialog data by filtering dialog data before sending to the client.
- Fixed dialog editor layout issues and improved usability.
- Fixed missing default values for some dialog data fields.
- Added dialog priority support to control the order of dialog execution.
- Added condition support for dialog and scoreboard actions.
- Added frequency support for dialog to limit how often an dialog can be shown.
- Added new NPC preset to for scoreboard and condition support.
- Improved dialog button data format by removing redundant fields.
### 6.2.0
- Fixed string injection within dialogs.
- Fixed missing translation for action types.
- Added scoreboard action type to increase, decrease, set scoreboard values.
- Added
@score(...)NPC macro to display scoreboard values in the dialog. - Added additional unit tests.
- Improved spin button with indicators and better usability.
### 6.1.2
- Fixed container and menu sync issues with missing close container packets.
- Fixed close button not working in some cases.
- Fixed jumping mouse cursor between screen transitions.
- Fixed translation files and removed duplicate and deprecated entries.
- Moved Easy NPC wand to existing core item tab instead of creating a new one.
- Added cat pose support for different model parts (except tail).
- Improved EasyNPCWand glowing effect performance by disabling it when not needed.
- Improved custom entity detection by excluding non-living entities like displays, makers, throwns
- Improved cat variant handling.
### 6.1.1
- Fixed #612 by re-validating entity types.
- Fixed #610 by force sync of hat and head layers for specific models.
- Fixed orc textures.
- Improved custom model support and performance, by moving related logic into to client side only.
- Improved caching of player to UUID mappings for player skins.
- Limited change model commands and logic to Doppler NPCs only.
### 6.1.0 ✨
This is a major release. Please back up your worlds and NPC data before updating. This version
contains many improvements, optimizations, and internal changes that are **not fully compatible**
with earlier releases.
⚠️ Breaking changes
- Existing NPCs and their configuration data from versions before 6.1.0 may not load correctly or
- Internal data formats and some behaviors have been refactored to support new use-cases.
🧩 New modular structure
Easy NPC is now split into three separate mods:
- Easy NPC** – Bundle that includes both Core and Configuration UI for a plug‑and‑play experience.
- Easy NPC: Core** – Lightweight runtime and logic for NPCs, with minimal dependencies. Intended
- Easy NPC: Configuration UI** – Standalone configuration interface for creating and editing NPCs.
🎯 Why this change?
- Allows servers and modpacks to ship only the **Core** mod on the server side for a leaner setup.
- Reduces memory usage and load times when the UI is not required everywhere.
- Makes development and testing faster by separating UI and core logic.
[history]: https://github.com/MarkusBordihn/BOs-Easy-NPC/commits/
[upgrade_guide]: https://github.com/MarkusBordihn/BOs-Easy-NPC/wiki/Upgrading
## Note
This change log includes the summarized changes. For the full changelog, please go to
the [GitHub History][history] instead.
Note: Please always back up your world / NPCs before updating to a new version!
Check the [upgrade guide][upgrade_guide] for more information.
### 7.14.0
- Fixed #846 by keeping custom poses for players who start seeing the NPC later.
- Fixed attribute and trading settings missing for players who start seeing the NPC later.
- Fixed changed max uses, XP and trading type not shown in the trading screens until reload.
- Fixed
/easy_npc sound setchanges not reaching players until the NPC was reloaded. - Added game tests that check NPC poses and settings after respawns and for new players.
### 7.13.0
- Fixed color and formatting tags in dialog button names showing as plain text.
- Fixed the button preview in the editor showing lowercase names as a raw translation key.
- Fixed the "Move EasyNPC" item not working for NPC owners outside of creative mode.
- Fixed
/easy_npc owner setreporting success even when the owner could not be changed. - Fixed the game crashing when the URL or player skin screen showed a skin download error.
- Fixed the preset browser search showing no results after scrolling down the list.
- Changed the network protocol version, so client and server must run the same mod version.
- Added
@initiator,@npcand@score()support to dialog button names to fix #841. - Added automatic client tests with the Client Runtime Interface Toolkit.
- Larger core refactoring and code cleanup.
### 7.12.2
- Fixed the Fairy hitbox being far too small, so its name tag and speech bubble sat in its body.
- Fixed scaled NPCs keeping their old hitbox and eye level, so hits, clicks and looking missed.
- Fixed oversized names, lists and NPC data in network packets being read without any limit.
- Fixed invalid NPC positions, scales, attributes, names and durations from being applied.
- Changed Fairy NPCs to take up the space of their model, so they collide and can be clicked.
- Changed Skeleton, Stray and Bogged NPCs to the vanilla hitbox height, they were slightly short.
- Changed the network protocol version, so client and server must run the same mod version.
### 7.12.1
- Fixed #836 by always showing "Restore", including datapack presets, with a reason tooltip.
- Fixed preset import and export messages missing, wrong or not warning about replaced NPCs.
- Fixed the preset browser reloading on each keystroke, leaking NPCs and clearing the selection.
- Fixed selection box drop-down lists being covered by the checkboxes and labels behind them.
- Fixed the preset list sorting, filter order and layout clipping options in small windows.
- Fixed
/easy_npc preset import datawithout a position importing it as a default preset. - Fixed spawn rate limit leaks, unstable preset IDs and "Spawn New" stacking NPCs on one spot.
- Changed "Restore" to refuse instead of spawning a copy when it is not permitted.
- Added sorting, a match count, reload, auto-close, the NPC ID and tooltips for presets and skins.
- Added
matching <pattern>batch imports with limits, a confirmation and a clickable position.
### 7.12.0
- Fixed #833 by showing Easy NPC Wand outlines only to the wand holder, owner and admins.
- Fixed #834 by adding "Set Home Here" and "Reset Home" buttons to the position configuration.
- Fixed #835 by keeping the NPC ID and position in exported presets, so imports restore the same
- Fixed preset imports and spawn eggs losing the owner's list entry and owner objectives.
- Fixed NPCs restored from an automatic backup losing their owner and becoming ownerless.
- Fixed selection lists showing only their first six entries and hiding the rest.
- Changed importing a preset to update the original NPC at its stored position instead of adding a
- Changed completed trades to play the "Trade completed" sound, which stayed silent before.
- Changed the API dialog call to report an unknown dialog label instead of always reporting success.
- Changed NPCs without arms to carry held items at the head or body instead of hiding them.
- Changed the optional Easy Model Entities dependency to require version 2.4.0 or newer.
- Added a "Sound" configuration with sounds for dialogs, speech, swimming, eating and fall damage.
- Added a searchable sound selection with volume and pitch sliders to the "Sound" configuration.
- Added a "Block Vehicles" option to keep NPCs out of boats, minecarts and modded chairs.
- Added the profession selection to all skin configurations and a new built-in skin per NPC type.
- Added client settings to hide name tags behind walls and
highlightEnabledfor wand outlines. - Added an "Exists" condition operation and API access to NPC movement, actions and presets.
### 7.11.0
- Fixed #828 by no longer freezing the server on logout when NPCs follow or watch the player.
- Fixed #831 by moving routine NPC removal messages to the debug log.
- Fixed #832 by making humanoid NPCs ignore custom player models, animations and poses.
- Fixed hourly NPC backups stuttering on large worlds and retaining timestamps of removed NPCs.
- Fixed hourly NPC backups losing the identity, owner and position of the backed-up NPC.
- Fixed owner-login restoration duplicating, repeatedly restoring, reviving or moving unloaded NPCs.
- Fixed NPC index and file synchronization issues causing lost NPCs, crashes or false warnings.
- Fixed stale NPC data after unloading, avoided redundant writes and added repeated-unload warnings.
- Fixed the preset browser failing to list custom and world presets saved in the SNBT format.
- Fixed speech bubbles losing their text and turning translucent with Iris shaders.
- Fixed the "Opacity" of an NPC being ignored while a shader pack is active.
- Fixed text formatting and macro parsing for translated speech bubbles and mod API texts.
- Fixed speech bubbles and their text staying hidden behind blocks while a shader pack is active.
- Added
minLightLevelto keep speech bubbles readable in dark surroundings.
### 7.10.0
- Fixed #829 by allowing bats and other non-walking mobs as the render entity of a Doppler NPC.
- Fixed the Wandering Trader NPC rendering without its texture.
- Fixed NPCs rendered as a bat, frog or warden showing a static pose instead of their animation.
- Fixed the NPC name tag showing above the previews in the "Custom Models" configuration.
- Fixed speech bubbles being cut off by walls, doorframes and the NPC's own body.
- Fixed the previews in the "Custom Models" configuration.
- Changed the previews in the "Custom Models" configuration to stand on a common ground line.
- Changed overlapping speech bubbles to move apart and to stay visible when the NPC is off-screen.
- Changed "Navigation: Automatic" to use flying movement for NPCs rendered as a flying mob.
- Changed the render entity list to hide seats, paintings, thrown items and other non-mob entities.
- Added a "Min. hover height" slider for flying NPCs and client settings for speech bubbles.
### 7.9.0
- Fixed modded fish NPCs, like the ones of Tide 2, spinning around instead of swimming upright.
- Fixed "Navigation: Automatic" using ground movement for water NPCs and aquatic model NPCs.
- Fixed the "Random Swimming" objective never moving an NPC that uses aquatic navigation.
- Fixed a swimming NPC shaking or twitching in place instead of holding its tilt and swim depth.
- Fixed a swimming NPC turning in circles forever when it could not reach its next path point.
- Fixed an NPC that fell into water never getting out of it again.
- Fixed a following NPC searching a new path every tick while its target was unreachable.
- Fixed the "Move to" actions stopping short of a raised target or not starting while in the air.
- Fixed "Move back to Home" ignoring height differences and never returning from beyond 32 blocks.
- Fixed the "Opacity" input field being too narrow to show a value of 100.
- Fixed a damaged NPC with an Easy Model Entities model never flashing red.
- Changed modded water NPCs to swim level, vanilla water mobs keep their tilt as before.
- Changed the "Move to" actions to walk up to 48 blocks and to teleport only beyond that range.
- Changed "Move to" and "Move back to Home" to give up after three seconds without progress.
- Changed the timeout of a "Move to" action to count real ticks, it ran twice as long before.
- Changed a new "Random Swimming" objective to rank below following, fleeing and attack goals.
- Changed "Opacity" of an NPC with an Easy Model Entities model to be applied by that mod itself.
- Changed the minimum Easy Model Entities version to 2.3.0, older versions disable the integration.
- Added "Depth below surface" and "Height above floor" sliders for the swim level of an NPC.
- Added log entries for the NPC files written on a world save, with a warning above 250 ms each.
### 7.8.1
- Fixed #827 by rendering fish NPCs in water upright instead of always flopping on their side.
- Fixed #828 by keeping a damaged NPC from blocking the world save, it now falls back to defaults.
- Fixed a restored NPC picking up a random preset ID that changed with every save.
- Changed NPC data to only be written to disk when it actually changed.
### 7.8.0
- Fixed smaller text and UI issues.
- Changed an NPC that is already standing at its target position to finish the movement right away.
- Changed the "None" skin tab to "Advanced", which now holds "Disable Skin" and the texture field.
- Changed the minimum Easy Model Entities version to 2.2.0, older versions are no longer accepted.
- Added a "Move to" action, which sends an NPC to a position, a player, its owner or its home.
- Added a "Move to and Wait" action, which runs the following actions only after the arrival.
- Added an arrival radius, a timeout and an optional teleport to both move actions.
- Added an "Opacity" attribute from 0 to 100, which fades body, armor and hand items together.
- Added a "Set Opacity" action, which turns an NPC into a ghost or hides it completely.
- Added the "Lantern Wraith" preset, a ghost walking a square with a short line at every corner.
- Added API access to the move actions and the opacity of an NPC.
- Added a "Resource Location" skin type, which renders any texture of a mod or a resource pack.
- Added an "Advanced" skin tab, which previews the NPC with the entered texture before applying it.
### 7.7.7
- Fixed #821 by keeping the transparency of 64x64 skins, which Fresh Moves needs for its eyes. Skins
- Fixed #818 by running trade actions for Villager and Wandering Trader NPCs as well.
- Fixed a dialog with several text variants switching its speech bubble size every second.
- Fixed the skin cache storing the processed image instead of the original download.
- Fixed the untranslated interval names, like
PER_DAY, of the "Execution Limit" condition. - Fixed the
sitanimation of Easy Model NPCs, which never used the built-in sitting pose. - Fixed the speech bubble being cut off by the head of an NPC when a player stood close to it.
- Changed speech bubbles to keep their screen size and to move down or aside when a player is close.
- Changed the speech bubble text to render 20% larger than a name tag.
- Changed a time based action set with a "Wait" action to run in order instead of picking one entry.
- Changed dialog texts to wrap later, so an existing dialog can switch to the wider screen layout.
- Changed fallback actions to skip screen actions without a player, like the regular actions do.
- Changed the minimum Easy Model Entities version to 2.1.0, older versions disable the integration.
- Added a "Wait" action, which pauses the following actions of an event for a chosen duration.
- Added the "Countdown Timekeeper" preset, a speech bubble count to ten ending in sound and sparks.
- Added scaling and rotation for Doppler NPCs behind the "Experimental Features" checkbox. Both only
- Added a "Sound" action, which plays a sound at the NPC with sound category, volume and pitch.
- Added "Every 5 Minutes" and "Every 15 Minutes" to the "Execution Limit" condition.
- Added a "Player Idle" condition, which checks how long a player has not moved.
- Added an "Immovable" attribute, which keeps an NPC in place against pushing and knockback.
- Added
/easy_npc pauseto pause a single NPC or all NPCs; the global pause ends with the server. - Added API access to the sound action, the pause state and the idle time of a player.
- Added a texture override per model slot for Easy Model NPCs over
/easy_npc render texture. - Added a "Repeat" playback mode with a count and a time limit to the "Play Animation" action.
- Added API access to animation variants, texture slots and textures of Easy Model NPCs.
### 7.6.0
- Fixed unclear mod conflict errors for duplicate entity data tracker IDs.
- Fixed third-party health bars rendering over NPC previews in configuration and dialog screens.
- Fixed Doppler and Easy Model Entities NPCs using default hitboxes instead of their model size.
- Fixed the
/easy_npccommands suggesting no NPC UUIDs at all on a server. - Fixed the pose list of the "Set Pose" action drawing over its input field.
- Fixed the untranslated "Loop", "After current" and "Action Data Type" labels of the action editor.
- Fixed the missing hint text of the "Chance" condition.
- Fixed long condition hints running out of the editor screen instead of wrapping.
- Fixed the misaligned help icons and text buttons of the "Message" action.
- Fixed changes to the "Set Pose", "Play Animation" and "Stop Animation" actions not being saveable.
- Fixed the speech bubble text sitting closer to its upper border than to its lower one.
- Changed the NPC suggestions to list the crosshair NPC first and only own NPCs without permissions.
- Changed a preset export to only store what differs from a new NPC, without position or owner.
- Changed a preset without objectives or actions to fall back to the defaults of its NPC type.
- Changed events without a player, like "On Spawn" or "On Kill", to check their conditions. An
- Changed a time based action to pick the owner as
@initiatorwhenever the owner is nearby. - Changed speech bubbles to stay visible from 5 up to 18 seconds, depending on the text length.
- Changed the "Set Pose" action to only show its input field for the "custom" pose entry.
- Added time based actions on five fixed steps, from every ~1 second up to every ~15 minutes.
- Added a "Message" action for chat, system message and speech bubble text without a command.
- Added text variants, a sender name, a recipient and translation keys to the "Message" action.
- Added the speech bubble graphic as
easy_npc:textures/gui/speech_bubble.pngfor resource packs. - Added a "Chance" condition in percent and a "Relationship" condition for owner and faction.
- Added spawn, owner login, state change, day / night, weather and the missing "On Trade" events.
- Added a base preset per NPC type under
easy_npc:api/preset/base/, usable as a parent preset. - Added the "Wandering Companion" preset, a talkative NPC built from time based messages.
- Added an action registry, an action handler, a preset validator and richer event data for mods.
- Added a tooltip with name, type and distance to every NPC suggestion of the
/easy_npccommands. - Improved the NPC suggestions, which appear without typing and tolerate a near miss of one block.
### 7.5.0
- Fixed #814 by giving every Cobblemon NPC its own animation state instead of one per species.
- Fixed #813 by letting "Move back to Home" work at any distance instead of only near its home.
- Fixed #812 by checking once per session whether a player changed their skin.
- Fixed #810 by accepting Cobblemon aspects of resource packs instead of only "shiny" and "female".
- Fixed the home position of an NPC always reading as unset, which hid "Home" in the configuration
- Fixed NPCs spawned from a preset, the preset browser or a respawn never getting a home position.
- Fixed an NPC spawned from the preset browser keeping the home position of the world the preset was
- Fixed NPCs being drawn as a white silhouette with a shadow in the configuration, skin and preset
- Fixed the server crashing when an NPC with a "Tempt" objective ticked its goals.
- Fixed a single or boss spawner spawning without any limit when its preset carried no stored NPC.
- Fixed the "Legacy Easy NPC Data" warning appearing for newly created NPCs.
- Fixed missing transparency corrections for old 64x32 skins, which showed layer artifacts.
- Fixed the player skin screen freezing for a moment while a player name was looked up.
- Fixed the "Reset look at ..." objective label, which read "Reset loot at ..." in some languages.
- Fixed the "No Gravity" attribute being ignored after a preset import, which let NPCs fall.
- Fixed the Fabric game tests, which crashed on start because of the development helper mods.
- Fixed NPCs losing their owner when they were spawned again after a despawn.
- Fixed objectives being deleted from an NPC when the mod providing them was missing at start.
- Fixed importing a preset without a stored id, which spawned an NPC without owner and home.
- Fixed "Follow owner" and "Look at owner" keeping their old target after the owner was changed.
- Fixed attack targets staying assigned to an NPC after the targeted entity was gone.
- Fixed the "Look at Item" objective, which could be stored but never did anything.
- Fixed walking animation for Doppler NPC and 3rd party models.
- Fixed Forge never running its server start-up step, which left NPC tracking, factions and the
- Fixed Forge development runs starting without any mixins, which disabled the vanilla entity
- Changed the movement objectives to a fixed order: flee, follow, return home, then stroll. NPCs
- Changed inserting a preset into a vanilla monster spawner to keep its delay, count and range.
- Changed "Follow owner" and "Look at owner" without a chosen target to follow the owner of the NPC.
- Changed datapack presets to
easy_npc/preset/, the old folder still works, but only for easy_npc. - Changed the preset browser to always list its entries in the same order.
- Removed the experimental user-defined NPCs; the extra config file is no longer read or created.
- Removed the unused
SERVER_SKINskin type. - Added a new game test structure to support game tests in 1.21.11 and higher.
- Added a reload button to each entry of the player skin screen, to fetch a single skin again.
- Added the reason to the log whenever an NPC is removed, so an unexpected despawn can be traced.
- Added suggestions to
/easy_npc render set species. - Added support for presets from other mods, which no longer have to use the
easy_npcnamespace. - Added a preset visibility that hides a preset from the preset browser and the NPC screens.
- Added a teleport distance and a resting spot offset to the follow objectives.
- Added item tags, a "can be scared" option and a "only without owner" option to "Follow item".
- Added an item field to the look objectives, so an NPC can watch a chosen dropped item.
- Added an identifier per NPC, so a mod can find its own NPCs again.
- Added an option to spawn an NPC again when its owner logs in.
- Added game tests for NeoForge, which had none, and restored the spawn egg, dialog screen, data
- Added game tests for every configuration and editor screen, covering all three mod loaders.
- Added game tests for the home position, covering the spawn default, the stored value and
- Improved the model name parsing, which mistook a species ending in "_shiny" for a variant.
- Improved following of flying NPCs, which now steer directly when there is no path through the air.
- Improved third party support with an API for presets, own objectives and objective configuration.
### 7.4.0
- Fixed #807 by no longer pulling every same-type NPC within 32 blocks into a "Defend Self" fight.
- Fixed #805 by evaluating all visibility settings together instead of stopping at the first one.
- Fixed #804 by keeping the custom name on Doppler NPCs for name based textures and the name tag.
- Fixed #803 by adjusting assets to match typical Minecraft style instead of generic UI style.
- Fixed the day and night detection, which counted sunrise as night and sunset as day.
- Fixed the visibility in the Nether and the End, which used the Overworld time.
- Fixed the time and game mode visibility checkboxes appearing in a random order.
- Fixed game tests only being able to fail on their first assertion, which hid later failures.
- Fixed the "Saddled" horse skin variants, which never showed a saddle.
- Changed "Visible to Owner" and "Visible to Team" to also follow day, night and game mode.
- Changed Evoker, Illusioner and Vindicator variants without "Crossed Arms" to keep their arms down.
- Added a "Defend Faction" objective that attacks whoever hurt a nearby faction member or player.
- Added a system message when faction members fight each other and the faction stays out of it.
- Added a head equipment slot for Illagers so their captain banner can be removed or swapped.
- Added a day and night preview to the display configuration screen.
- Added unit and game tests for the visibility attributes and the faction defense.
- Improved the visibility check performance by reading the display attributes only once per check.
- Improved display attributes from older versions by completing them with their defaults.
- Improved the attack objective screen by disabling "Protect Owner" and "Defend Faction" when unset.
### 7.3.0
- Improved skin variants by carrying their data as typed fields instead of parsing variant names.
- Centralized the Cobblemon mod id and default model on shared constants.
- Reduced duplicated enum code with a shared
EnumUtilshelper forget(String)lookups. - Optimized villager profession and type lookups to use direct registry keys instead of scans.
- Optimized enum name lookups by caching tag names, ids and keys once at construction.
- Added unit and game tests for skin variants, villager resolution and the enum helper.
### 7.1.2
- Fixed #801 by using combination for NPC, Dialog and Action UUIDs to avoid collisions for action
### 7.1.1
- Fixed #800 by lazy loading entity types.
- Fixed #799 by fixing edge cases and adding additional documentation and better log messages.
- Fixed #798 by considering console, commands and command blocks as trusted command sources.
- Fixed a critical single-player / LAN issue where client and server NPCs shared the same registry.
- Fixed a memory leak in the configuration menu handling and added timeout and disconnect cleanup.
- Fixed duplicate downloads when several NPCs request the same skin at the same time.
- Fixed skin lookups failing after a error so a slow server no longer freezes the game.
- Fixed the URL skin screen freezing the game while checking a remote image; the check now runs in
- Added a new World Spawner block that limits an NPC preset across the whole world (all dimensions),
- Hardened remote skin downloads with a strict size limit and safe redirect handling to prevent
blockPrivateAddresses setting.- Improved server performance by only sending entity and player load events to NPCs that actually
### 7.0.0
- Fixed #794 by using the expected type for NPC rendering.
- Fixed scaling screen preview by pinning the entity feet to the 0 line of the scale ruler, so NPCs
box updates.
- Fixed #791 by adding Wandering Trader NPC type.
- Fixed #788 by extending the AI safeguards to Epic Fight and raw NPC variants (Piglin, Villager,
- Fixed #787, #531, #237 and #184 by adding a faction system with
/easy_npc factioncommands,
- Fixed #787, #771 and #572 by adding a new
targetobjectives tab to attack hostile factions or
- Fixed #786 by adding gender and shiny model variants for Cobblemon NPCs, searchable via
female
shiny in the model selection.- Fixed faction combat between invulnerable NPCs by adding the new
Attackable by Factionscombat
- Fixed Cobblemon model selection previews for oversized species by scaling with Cobblemon's own
- Fixed faction management edge cases by validating faction names, sorting faction lists and
- Fixed custom skin reloads by loading and clearing texture caches per skin model instead of always
- Improved the
Attackable by Players/Monsters/Factionscombat attributes to work independently of
Invulnerable, each opening a targeted hole for its own attacker group.- Improved preset command and network handling by splitting the large handlers into smaller focused
- Added Easy Model Entities Support.
- Added faction manager and faction editor screens to create, color and delete factions and manage
FACTION_MANAGEMENT security feature.- Added new
Miscattributes tab as home for the NPC faction assignment. - Added reusable warning and help icon components for inline hints with tooltips.
- Added additional unit and game tests for factions, target objectives and Cobblemon model variants.
### 6.25.0
- Fixed #782, #636, #622 by preserving data components during validations.
- Fixed #780 by caching remote texture downloads and reducing duplicate registrations.
- Fixed #767 by clamping attribute sliders against extreme values from other mods.
- Fixed #754 by adding custom data item matching for NPCs with actions and conditions.
- Fixed texture manager running in the wrong thread may cause crashes and deadlocks in >= 1.21.x.
- Fixed empty UUID handling for action conditions.
- Fixed execution limit reset for actions.
- Added texture registration queue to avoid multiple simultaneous downloads in the same tick.
- Added NPC coin, key and red token as consumable items for NPCs with actions and conditions.
- Added
Welcome Coin Traderas example NPC preset with custom coin, key and red token item data. - Added attribute safeguards against extreme values from other mods.
- Increased fallback max health value from 1024 to 4096 for high-health NPCs.
- Improved texture manager by reducing duplicate texture checks and registrations.
### 6.24.0
- Fixed #459, #775 by adding an option to block interactions with invisible NPCs.
- Fixed #774 startup crash related to optional Epic Fight and Cobblemon entity type maps.
- Fixed #773 by checking timed trade resets during base ticks and before opening trade screens.
- Fixed trade reset timing by increasing internal tickers correctly.
- Added time of day and weather conditions for #459.
- Added additional unit and game tests for trade resets, ticker handling and entity attributes.
- Added
Skywatch Scoutas example NPC preset with time of day and weather conditions.
### 6.23.0
- Fixed #774 by migrating isSunBurnTick error to 26.x.
- Fixed #772 by adjusting texture retries with 403 and 404 errors and lowering logging.
- Fixed #770 item rendering for Epic Fight NPCs (Evoker, Pillager, Vindicator and humanoid skins).
- Fixed #769 door loops with NPCs not reliably opening or closing doors.
- Fixed #760 by adding a dialog option and config setting (buttonConditionMode: LOCK or HIDE) to
- Fixed #709 by adding color picker popup for names with 32 colors and/or a manual RGB/hex value.
- Fixed NPC name color being reset when renaming without a specified color by preserving the
- Improved the door movement attributes so "Pass Door" is automatically enabled while "Open Door"
### 6.22.0
- Fixed #766 by passing the full server player context to command execution for better compatibility
- Fixed #764 by adding entity health, npc health conditions and NPC preset
Grukk, the Sparring Post as example for using these conditions.- Fixed #763 by making sure dialog button execution limits are now recorded.
- Fixed #758 by providing a example NPC preset named
One Wish Companion. - Fixed crashes related to 3rd party villager AI reading non-registered brain memories on Easy NPC
- Fixed Dialog buttons are not locked for server-side data as preparation for #760 and #644.
- Fixed #628 by adding conditional dialog opening support / command for better control over when
- Added brain AI for Piglin and Piglin Brute NPCs and registered the full vanilla brain memory set.
- Added additional guns to the gun tag for #757.
- Added a new "Open Dialog (Conditional)" action that opens a named dialog only if its conditions
- Added new entity health and npc health conditions for actions, dialogs and dialogs buttons.
- Added Piglin, Piglin Brute and Zombified Piglin NPCs invulnerable, for consistency with other
- Added a new "Knockback Immunity" combat attribute that prevents the NPC from being knocked back by
- Added a new "Explosion Immunity" combat attribute that makes the NPC immune to explosion damage
- Moved the "Projectile Collision" attribute to the Combat attribute screen, where it fits better
### 6.21.0
- Fixed item attachment for Illagers in crossed-arms pose.
- Fixed broken illager crossbow attack goal.
- Fixed crashes related to 3rd party items which are not renderable as hand items #756.
- Fixed crashes related to 3rd party mixins trying to access non-existing model parts #756.
- Fixed log.info spam message by reducing log verbosity and adding additional checks for custom
- Improved EasyNPCModelManager performance.
- Refactored NPC renderers to remove default hand item layer.
### 6.20.0
- Fixed crashes related to 3rd mods trying to access non-existing NPCs goals.
### 6.19.0
Note: This update adjusted the dialog background images by 10x6 pixels, which may require users to
adjust their custom dialog backgrounds if they are using custom ones.
- Fixed #752, #130 by adding dialog button condition support to allow to disable buttons.
- Fixed #683, #215 by adding typewriter effect support for dialog text.
- Fixed #690, #309 by allowing conditions for dialog, dialog buttons and interactions.
- Fixed smaller UI issues with dialog screen layout and background.
- Refactored dialog background images by 10x6 pixels on each side.
- Refactored dialog screen layout to better fit the new background size and improve appearance.
- Added typewriter effect and client configuration for dialog text.
- Added condition symbols to indicate the condition status for dialog, buttons and interactions.
- Added amount field for item conditions to allow checking for specific amounts of items.
- Added
Threshold Wardenas example NPC preset with various conditions and actions. - Added smaller bug fixes and optimizations related to dialog conditions and button states.
### 6.18.0
Note: This update changes the internal data format for conditions and actions, which may reset /
remove legacy existing execution-limit entries without stored IDs.
- Fixed #745 by adding conditions for actions to allow more complex and dynamic behavior.
- Fixed #652 by adding dialog button tooltip for longer texts.
- Fixed #687 by adding command value tooltip to show the full value.
- Added Experience Level conditions.
- Added Game-mode conditions.
- Added has item in inventory condition.
- Added has item in hand condition with (main hand and off-hand) support.
- Added player health condition.
- Added player tag condition.
- Added player team condition.
- Added Goldmere example NPC preset with various conditions and actions.
- Added negative condition support to allow negating conditions for more complex logic.
- Removed parameter pseudo IDs for
ActionDataEntryand replaced them with random UUIDs. - Refactored condition system to allow more condition types.
### 6.17.0
- Fixed #738 by adding additional tooltips for "Execute as player"
- Fixed to detailed logs by reducing log.info messages during startup and in-game.
- Added additional unit and game-tests.
### 6.16.0
- Fixed #732 by providing option to disable ESC key and close button for dialogs.
- Fixed #723 by avoid auto-close in specific cases like trading screens.
- Added general dialog configuration options to allow users to customize dialog behavior.
- Added avatar scaling and position offset options for dialogs.
- Added missing translation keys.
### 6.15.1
- Fixed #735 by extending the correct base class.
- Fixed several 26.1.2 specific issues from manual spawn testing.
### 6.15.0 (Trades, Player Heads, Epic Fight and QOL updates)
- Fixed #731 by resyncing species data, if species list is empty on the client.
- Fixed #730 by improving Epic Fight integration and enabled experimental features.
- Fixed #729 by making sure trade uses are stored correctly.
- Fixed #728 by adding custom head support for player heads.
- Fixed #689 by showing remaining trade uses and allow resetting manually and automatically.
- Fixed #218 and #132 with new trade configuration screen and better support for custom trades.
- Fixed trade specific edge by switching between basic and normal/advanced trading mode.
- Fixed dialog button text is truncated with tooltip showing the full text.
- Fixed Cobblemon animation issues by syncing animation state with Cobblemon Animation System.
- Added per trade specific actions to allow users triggering actions after buys.
- Added trade reset button to reset all trades easily.
- Added trade usage information to trade configuration screen.
- Added experimental feature state to allow users to manually enable experimental features.
- Added Griselda Grindstone as example trader with actions.
- Cleanup test files.
### 6.14.0
- Fixed #727 by making sure changes are synced to the client when changing values.
- Fixed #726 by adding additional allow lists for specific commands.
- Fixed #686, #389, #304, #211 by adding basic Cobblemon support with Cobblemon NPC.
- Fixed dialog misalignment and navigation issues by adjusting dialog sprites and screens.
- Fixed x and z root rotation by correcting rotation logic and pivot calculations.
- Added basic Cobblemon support with custom NPC type and model for testing.
### 6.13.0 (Security and Permissions Updates)
Notes: This update includes better security checks and permissions for multiplayer environments. It
allows to execute server commands which can be potentially dangerous if used with malicious intent.
- The update splits the model root data and logic from the rest of the model part data and logic,
- Fixed #725 by separating model root data and logic from the rest of the model part data and logic.
- Fixed #722 by supporting .sbnt files as local presets.
- Fixed #675 by adding dedicated assets for dialog and config screen backgrounds.
- Fixed #605, #532, #529 with new security checks and permissions system.
- Fixed #469, #311 by adding experimental api documentation and examples for custom model support.
- Fixed double rendering of config screen background by removing redundant background rendering.
- Fixed Ghast and Slime hitbox and name tag position issues by adjusting bounding box.
- ⚠️ Added security checks to prevent potential exploits and allow safe usage in multiplayer
- Replaced dynamic dialog screen background with a static one for better performance, customization
- Replaced dynamic config screen background with a static one for better performance.
- Refactored config-ui specific components and removed them from the core mod.
- Removed duplicated sprite sheets.
- Prepare permission system for possible Luck Perms integration in the future like #712.
- General code cleanup and optimizations related to config screen rendering and assets.
### 6.12.0
- Fixed #714 by adding additional checks for custom model part list based on vanilla models.
- Fixed #713 by reducing log verbosity with downgraded per-NPC INFO messages to DEBUG and
- Fixed #711 by reduced oversized startup/config log output.
- Fixed NBT validation guard to prevent unnecessary buffer allocations in production.
- Added model part name constants to EasyNPCModelManager for consistent usage across mixins.
- Improved RenderEntityTypeSupportConfig by enhancing filter logic and optimizing data structures
- Removed verbose debug logs that dump large data structures.
### 6.11.1
- Fixed #710 by improving backward-compatible parsing for recoverable trade data.
### 6.11.0
- Fixed #703 rendering issue with new custom layer system and hand renderings.
- Fixed #701 by adding additional safeguards and logging for invalid trading offers.
- Fixed smart animation not working properly with modified head position.
- Fixed head tracking by moving player detection back to server side-only.
- Fixed CustomLookAtPlayerGoal to better handle edge cases and reduce jitter.
- Fixed issue with Doppler NPCs keeping their hand inventory.
- Improved PoseManager logging message.
- Updated logo with a new design.
### 6.10.0
- Fixed #698 by adding try and catch for 3rd party entity creation.
- Fixed #695 by clearing model part rotations/positions when switching to a
DEFAULTvanilla pose. - Fixed #695 by applying lock rotation and pose animation only when the NPC is idle.
- Fixed #695 by correcting root rotation pivot to use actual bounding box height instead of 0.5f.
- Fixed multiple objective registration issues including inverted
isTargetedPlayercheck, wrong
targets.
- Fixed goal reference being retained after objective is unregistered.
- Removed auto-lock of ROOT rotation when loading poses; root lock is now user-controlled.
- Added lock rotation checkbox to the advanced and custom pose configuration screens.
- Added model-specific pose key filtering in
ConfigurationMenuHandlerfor the default pose screen. - Added unit tests for
CustomPosition,CustomRotation,CustomScale,ModelPose,
ModelAnimationBehavior and ModelAnimationData.- Added
NPCDataIsolationTestHelperand game tests for Fabric and Forge. - Increased max head yaw range from 60° to 65°.
### 6.9.0
- Fixed #692, #666 by adding caching and safeguards to prevent redundant retriggering of NPC entity
- Fixed #651, #617 by adding basic custom poses for all supported NPC types.
- Fixed #597 by adding additional Flee goals for fleeing from players, villagers, monsters, ...
- Fixed pose loading to read directly from mod resources instead of copying files to disk.
- Fixed duplicate
saveNPCcalls on entity join by checking existing registry entry first. - Added
despawnandspawncommands to remove and re-spawn NPCs by UUID with configurable removal
- Added
ModelPoseAPIandEasyNPCEntityHandlerpublic API classes for controlling NPC poses and
- Added pose data files for all supported NPC types.
- Added lock rotation checkbox to the basic pose configuration screen.
- Added
MoveToPositionGoalto move an NPC to a position before executing a callback action. - Added
EasyNPCLookControlandEasyNPCBodyRotationControlto respect locked root rotation. - Added synced owner change and dimension change to the NPC entity data index.
- Added EasyNPCItemAttachmentLayer into various entity renderers.
- Added dedicated
Flee Objectiveconfiguration tab with objectives for fleeing creepers, monsters,
- Added
FOLLOW_ITEMobjective to the follow objectives tab to make NPCs follow item entities by
minecraft:apple).- Added
LookAtEntityByUUIDGoaland enabled the look-at-entity-by-UUID and look-at-owner objectives
- Added
persistentflag toSynchedDataIndexso that transient indices (e.g. crossbow charge,
- Added configurable
customParticlesEnabledflag toSlimeBasefor API consumers. - Added
SoundType.PETand mappedCAT_PURRto the cat NPC for tamed ambient sound variety. - Reduced log verbosity for periodic NPC save operations from INFO to DEBUG.
### 6.8.3
- Fixed #680 by enforcing version miss-match by upgrading network protocol version.
- Fixed #679 by resetting position, rotation and size for name tag.
- Fixed #665 by adding multi state slide for root rotations.
- Fixed #664 by adding option to disable following mouse cursor for easier posing.
- Fixed #663 by improve support for X and Z root rotations.
- Fixed #661 by adding quick rotation with NPC wand and sneaking to the NPC to rotate the root to
- Fixed move tool is wrongly triggering interactions by adding check for move tool in interaction
- Fixed Preset Item is wrongly triggering interactions by adding check for preset item in
- Fixed Slime and Ghast hitbox and name tag position issues by adjusting bounding box and eye height
- Fixed Slime and Ghast GUI position by adjusting offset values.
### 6.8.2
- Fixed #677 by extending
SafeMerchantDatawith notifyTrade to avoid crashes. - Added progression data support for leveling up NPCs based on player interactions and actions.
- Added global NPC tracking system for better management and debugging of NPCs across the world.
- Added
OriginalModelConfig.withVariantTexture()option to allow using variant textures with the
### 6.8.1
- Fixed #676 by using existing preset helper method instead of custom one.
### 6.8.0 (Adding API support)
- Fixed #667 by adding warning messages and additional checks for invalid network packets.
- Fixed Horse spawn eggs model.
- Fixed pose support for allay, chicken, creeper, fox, ghast, horse, illager, iron golem, slime and
- Added NPC base classes for better API support.
- Added NPC raw classes for advanced API support.
- Added Slim and Ghast NPC types.
- Added Custom Model API for easier integration with other mods and custom models.
- Refactored internal data handling and registration for better maintainability and future
### 6.7.1
- Fixed #657 and #656 by adding additional client side checks for vanilla bug.
### 6.7.0
- Fixed #650 by implementing Wolf Leg Animations in setupAnim method.
- Fixed #648 by fixing canBeHitByProjectiles translation.
- Fixed #645 by adding
allowBypassInvulnerabilityconfig option to allow/deny bypassing
- Fixed delete button showing label even with small width.
- Fixed up and down buttons not positioned correctly in some cases.
- Fixed name tag showing up for dialog and configuration UI.
- Fixed distance action issue were multiple actions are not properly triggered.
- Fixed issues with NPC presets.
- Fixed Cat NPC and Wolf NPC owner data not syncing properly.
- Added preset browser for easier selection of common NPC presets.
- Added preset .snbt (text) export and import functionality for sharing NPC presets.
- Refactored existing NPC presets to use new .snbt format.
- Refactored spawner system to use new preset format for better maintainability and future
### 6.6.2
- Fixed #643 by rework scaling system.
- Fixed scaling not properly updating hitbox and nametag position after restart / reload.
- Added MID and MOUSE_OVER name tag visibility modes for finer control over NPC name display.
- Added team-based name tag visibility support respecting vanilla Team.
### 6.6.1
- Fixed #638 by refactored internal data handling for display attributes.
### 6.6.0
- Fixed #634 by implementing asynchronous texture loading with dedicated thread pool.
- Fixed texture loading blocking render thread causing game freezes.
- Fixed race conditions in texture reload protection using atomic operations.
- Fixed resource leaks in HTTP connections during remote texture downloads.
- Fixed URL validation spam allowing multiple simultaneous downloads of the same texture.
- Fixed exception handling for remote image validation preventing crashes on invalid URLs.
- Fixed
defineId called for:warning messages during NPC loading. - Refactored texture loading architecture with multi-level defense and rate limiting.
- Refactored entity data registration logic for better maintainability.
- Converted data classes to modern Java records for better immutability and thread-safety.
- Added thread-safe session server spam protection with ConcurrentHashMap.
- Added comprehensive error recovery with automatic cooldown reset on failures.
- Improved texture loading with 2-thread pool and 500ms rate limiting.
- Improved exception handling with specific catch blocks for IIOException and FileNotFoundException.
### 6.5.2
- Fixed Villager profession and job skin issue.
- Improved GitHub workflows by adding cache for gradle dependencies.
- Improved Gradle build time and cleanup tasks.
### 6.5.1
- Fixed #632 by implementing ON_KILL action type and event.
- Fixed #629 by improving texture handling performance, caching, and memory usage.
- Fixed kill command is not working on NPCs.
- Fixed texture reload protection preventing cache reload after eviction.
- Fixed WebP validation bug in remote image validator (missing return statement).
- Refactored texture handling logic for better maintainability and future improvements.
- Added time-based reload protection (60 seconds) to replace permanent blocking mechanism.
- Added missing variant textures for chicken, pig and wolf.
- Added additional unit tests for texture handling.
- Improved gradle build tasks.
### 6.5.0
- ⚠️ Removed jar-in-jar bundle approach for better mod compatibility and api capabilities.
- Fixed #627 scissor implementation for better compatibility with other mods.
- Fixed #625 lively animation issues when using rotated or moved model parts.
- Fixed default animation are canceled when using scaled model parts.
- Added better pose animation control with smart, default und none options.
### 6.4.1
- Fixed #626 screen switching logic for different NPC UUIDs, thanks to
Spawnbladefor the detailed
### 6.4.0
- Fixed #626 by improving dialog data validation and error handling.
- Fixed #623 by refactoring render data and render handling.
- Fixed #622 by making sure custom data are properly saved and loaded.
- Fixed open dialog action type to allow opening dialogs from other NPCs.
- Fixed hashing issues by adding missing equals and hashCode methods for ConditionDataSet and
- Added custom data test item for #622 and easier testing of custom data.
- Improved records and fixed potential issues with missing data.
### 6.3.0
- Refactored config ui specific components and removed them from the core mod.
- Fixed dialog data by filtering dialog data before sending to the client.
- Fixed dialog editor layout issues and improved usability.
- Fixed missing default values for some dialog data fields.
- Added dialog priority support to control the order of dialog execution.
- Added condition support for dialog and scoreboard actions.
- Added frequency support for dialog to limit how often an dialog can be shown.
- Added new NPC preset to for scoreboard and condition support.
- Improved dialog button data format by removing redundant fields.
### 6.2.0
- Fixed legacy custom name parsing.
- Fixed string injection within dialogs.
- Fixed missing translation for action types.
- Added scoreboard action type to increase, decrease, set scoreboard values.
- Added
@score(...)NPC macro to display scoreboard values in the dialog. - Added additional unit tests.
- Improved spin button with indicators and better usability.
### 6.1.2
- Fixed container and menu sync issues with missing close container packets.
- Fixed close button not working in some cases.
- Fixed jumping mouse cursor between screen transitions.
- Fixed translation files and removed duplicate and deprecated entries.
- Moved Easy NPC wand to existing core item tab instead of creating a new one.
- Added cat pose support for different model parts (except tail).
- Improved EasyNPCWand glowing effect performance by disabling it when not needed.
- Improved custom entity detection by excluding non-living entities like displays, makers, throwns
- Improved cat variant handling.
### 6.1.1
- Fixed #615 by checking if item is equipped in one of the hands.
- Fixed #612 by re-validating entity types.
- Fixed #610 by force sync of hat and head layers for specific models.
- Fixed orc textures.
- Fixed cat variant handling for 1.21.5.
- Fixed player render by adjusting render state
skinfield. - Fixed cat renderer by adjusting render state
texturefield. - Fixed position, scaling and rotation preview.
- Fixed Fairy model.
- Improved custom model support and performance, by moving related logic into to client side only.
- Improved caching of player to UUID mappings for player skins.
- Limited change model commands and logic to Doppler NPCs only.
- Added renderEntityRaw method to render NPC as-it-is.
### 6.1.0 ✨
This is a major release. Please back up your worlds and NPC data before updating. This version
contains many improvements, optimizations, and internal changes that are **not fully compatible**
with earlier releases.
⚠️ Breaking changes
- Existing NPCs and their configuration data from versions before 6.1.0 may not load correctly or
- Internal data formats and some behaviors have been refactored to support new use-cases.
🧩 New modular structure
Easy NPC is now split into three separate mods:
- Easy NPC** – Bundle that includes both Core and Configuration UI for a plug‑and‑play experience.
- Easy NPC: Core** – Lightweight runtime and logic for NPCs, with minimal dependencies. Intended
- Easy NPC: Configuration UI** – Standalone configuration interface for creating and editing NPCs.
🎯 Why this change?
- Allows servers and modpacks to ship only the **Core** mod on the server side for a leaner setup.
- Reduces memory usage and load times when the UI is not required everywhere.
- Makes development and testing faster by separating UI and core logic.
[history]: https://github.com/MarkusBordihn/BOs-Easy-NPC/commits/
[upgrade_guide]: https://github.com/MarkusBordihn/BOs-Easy-NPC/wiki/Upgrading
## Note
This change log includes the summarized changes. For the full changelog, please go to
the [GitHub History][history] instead.
Note: Please always back up your world / NPCs before updating to a new version!
Check the [upgrade guide][upgrade_guide] for more information.
### 7.14.0
- Fixed #846 by keeping custom poses for players who start seeing the NPC later.
- Fixed attribute and trading settings missing for players who start seeing the NPC later.
- Fixed changed max uses, XP and trading type not shown in the trading screens until reload.
- Fixed
/easy_npc sound setchanges not reaching players until the NPC was reloaded. - Added game tests that check NPC poses and settings after respawns and for new players.
### 7.13.0
- Fixed color and formatting tags in dialog button names showing as plain text.
- Fixed the button preview in the editor showing lowercase names as a raw translation key.
- Fixed the "Move EasyNPC" item not working for NPC owners outside of creative mode.
- Fixed
/easy_npc owner setreporting success even when the owner could not be changed. - Fixed the game crashing when the URL or player skin screen showed a skin download error.
- Fixed the preset browser search showing no results after scrolling down the list.
- Changed the network protocol version, so client and server must run the same mod version.
- Added
@initiator,@npcand@score()support to dialog button names to fix #841. - Added automatic client tests with the Client Runtime Interface Toolkit.
- Larger core refactoring and code cleanup.
### 7.12.2
- Fixed the Fairy hitbox being far too small, so its name tag and speech bubble sat in its body.
- Fixed scaled NPCs keeping their old hitbox and eye level, so hits, clicks and looking missed.
- Fixed oversized names, lists and NPC data in network packets being read without any limit.
- Fixed invalid NPC positions, scales, attributes, names and durations from being applied.
- Changed Fairy NPCs to take up the space of their model, so they collide and can be clicked.
- Changed Skeleton, Stray and Bogged NPCs to the vanilla hitbox height, they were slightly short.
- Changed the network protocol version, so client and server must run the same mod version.
### 7.12.1
- Fixed #836 by always showing "Restore", including datapack presets, with a reason tooltip.
- Fixed preset import and export messages missing, wrong or not warning about replaced NPCs.
- Fixed the preset browser reloading on each keystroke, leaking NPCs and clearing the selection.
- Fixed selection box drop-down lists being covered by the checkboxes and labels behind them.
- Fixed the preset list sorting, filter order and layout clipping options in small windows.
- Fixed
/easy_npc preset import datawithout a position importing it as a default preset. - Fixed spawn rate limit leaks, unstable preset IDs and "Spawn New" stacking NPCs on one spot.
- Changed "Restore" to refuse instead of spawning a copy when it is not permitted.
- Added sorting, a match count, reload, auto-close, the NPC ID and tooltips for presets and skins.
- Added
matching <pattern>batch imports with limits, a confirmation and a clickable position.
### 7.12.0
- Fixed #833 by showing Easy NPC Wand outlines only to the wand holder, owner and admins.
- Fixed #834 by adding "Set Home Here" and "Reset Home" buttons to the position configuration.
- Fixed #835 by keeping the NPC ID and position in exported presets, so imports restore the same
- Fixed preset imports and spawn eggs losing the owner's list entry and owner objectives.
- Fixed NPCs restored from an automatic backup losing their owner and becoming ownerless.
- Fixed selection lists showing only their first six entries and hiding the rest.
- Changed importing a preset to update the original NPC at its stored position instead of adding a
- Changed completed trades to play the "Trade completed" sound, which stayed silent before.
- Changed the API dialog call to report an unknown dialog label instead of always reporting success.
- Changed NPCs without arms to carry held items at the head or body instead of hiding them.
- Changed the optional Easy Model Entities dependency to require version 2.4.0 or newer.
- Added a "Sound" configuration with sounds for dialogs, speech, swimming, eating and fall damage.
- Added a searchable sound selection with volume and pitch sliders to the "Sound" configuration.
- Added a "Block Vehicles" option to keep NPCs out of boats, minecarts and modded chairs.
- Added the profession selection to all skin configurations and a new built-in skin per NPC type.
- Added client settings to hide name tags behind walls and
highlightEnabledfor wand outlines. - Added an "Exists" condition operation and API access to NPC movement, actions and presets.
### 7.11.0
- Fixed #828 by no longer freezing the server on logout when NPCs follow or watch the player.
- Fixed #831 by moving routine NPC removal messages to the debug log.
- Fixed #832 by making humanoid NPCs ignore custom player models, animations and poses.
- Fixed hourly NPC backups stuttering on large worlds and retaining timestamps of removed NPCs.
- Fixed hourly NPC backups losing the identity, owner and position of the backed-up NPC.
- Fixed owner-login restoration duplicating, repeatedly restoring, reviving or moving unloaded NPCs.
- Fixed NPC index and file synchronization issues causing lost NPCs, crashes or false warnings.
- Fixed stale NPC data after unloading, avoided redundant writes and added repeated-unload warnings.
- Fixed the preset browser failing to list custom and world presets saved in the SNBT format.
- Fixed speech bubbles losing their text and turning translucent with Iris shaders.
- Fixed the "Opacity" of an NPC being ignored while a shader pack is active.
- Fixed text formatting and macro parsing for translated speech bubbles and mod API texts.
- Fixed speech bubbles and their text staying hidden behind blocks while a shader pack is active.
- Added
minLightLevelto keep speech bubbles readable in dark surroundings.
### 7.10.0
- Fixed #829 by allowing bats and other non-walking mobs as the render entity of a Doppler NPC.
- Fixed the Wandering Trader NPC rendering without its texture.
- Fixed NPCs rendered as a bat, frog or warden showing a static pose instead of their animation.
- Fixed the NPC name tag showing above the previews in the "Custom Models" configuration.
- Fixed speech bubbles being cut off by walls, doorframes and the NPC's own body.
- Fixed the previews in the "Custom Models" configuration.
- Changed the previews in the "Custom Models" configuration to stand on a common ground line.
- Changed overlapping speech bubbles to move apart and to stay visible when the NPC is off-screen.
- Changed "Navigation: Automatic" to use flying movement for NPCs rendered as a flying mob.
- Changed the render entity list to hide seats, paintings, thrown items and other non-mob entities.
- Added a "Min. hover height" slider for flying NPCs and client settings for speech bubbles.
### 7.9.0
- Fixed modded fish NPCs, like the ones of Tide 2, spinning around instead of swimming upright.
- Fixed "Navigation: Automatic" using ground movement for water NPCs and aquatic model NPCs.
- Fixed the "Random Swimming" objective never moving an NPC that uses aquatic navigation.
- Fixed a swimming NPC shaking or twitching in place instead of holding its tilt and swim depth.
- Fixed a swimming NPC turning in circles forever when it could not reach its next path point.
- Fixed an NPC that fell into water never getting out of it again.
- Fixed a following NPC searching a new path every tick while its target was unreachable.
- Fixed the "Move to" actions stopping short of a raised target or not starting while in the air.
- Fixed "Move back to Home" ignoring height differences and never returning from beyond 32 blocks.
- Fixed the "Opacity" input field being too narrow to show a value of 100.
- Fixed a damaged NPC with an Easy Model Entities model never flashing red.
- Changed modded water NPCs to swim level, vanilla water mobs keep their tilt as before.
- Changed the "Move to" actions to walk up to 48 blocks and to teleport only beyond that range.
- Changed "Move to" and "Move back to Home" to give up after three seconds without progress.
- Changed the timeout of a "Move to" action to count real ticks, it ran twice as long before.
- Changed a new "Random Swimming" objective to rank below following, fleeing and attack goals.
- Changed "Opacity" of an NPC with an Easy Model Entities model to be applied by that mod itself.
- Changed the minimum Easy Model Entities version to 2.3.0, older versions disable the integration.
- Added "Depth below surface" and "Height above floor" sliders for the swim level of an NPC.
- Added log entries for the NPC files written on a world save, with a warning above 250 ms each.
### 7.8.1
- Fixed #827 by rendering fish NPCs in water upright instead of always flopping on their side.
- Fixed #828 by keeping a damaged NPC from blocking the world save, it now falls back to defaults.
- Fixed a restored NPC picking up a random preset ID that changed with every save.
- Changed NPC data to only be written to disk when it actually changed.
### 7.8.0
- Fixed smaller text and UI issues.
- Changed an NPC that is already standing at its target position to finish the movement right away.
- Changed the "None" skin tab to "Advanced", which now holds "Disable Skin" and the texture field.
- Changed the minimum Easy Model Entities version to 2.2.0, older versions are no longer accepted.
- Added a "Move to" action, which sends an NPC to a position, a player, its owner or its home.
- Added a "Move to and Wait" action, which runs the following actions only after the arrival.
- Added an arrival radius, a timeout and an optional teleport to both move actions.
- Added an "Opacity" attribute from 0 to 100, which fades body, armor and hand items together.
- Added a "Set Opacity" action, which turns an NPC into a ghost or hides it completely.
- Added the "Lantern Wraith" preset, a ghost walking a square with a short line at every corner.
- Added API access to the move actions and the opacity of an NPC.
- Added a "Resource Location" skin type, which renders any texture of a mod or a resource pack.
- Added an "Advanced" skin tab, which previews the NPC with the entered texture before applying it.
### 7.7.7
- Fixed #821 by keeping the transparency of 64x64 skins, which Fresh Moves needs for its eyes. Skins
- Fixed #818 by running trade actions for Villager and Wandering Trader NPCs as well.
- Fixed a dialog with several text variants switching its speech bubble size every second.
- Fixed the skin cache storing the processed image instead of the original download.
- Fixed the untranslated interval names, like
PER_DAY, of the "Execution Limit" condition. - Fixed the
sitanimation of Easy Model NPCs, which never used the built-in sitting pose. - Fixed the speech bubble being cut off by the head of an NPC when a player stood close to it.
- Changed speech bubbles to keep their screen size and to move down or aside when a player is close.
- Changed the speech bubble text to render 20% larger than a name tag.
- Changed a time based action set with a "Wait" action to run in order instead of picking one entry.
- Changed dialog texts to wrap later, so an existing dialog can switch to the wider screen layout.
- Changed fallback actions to skip screen actions without a player, like the regular actions do.
- Changed the minimum Easy Model Entities version to 2.1.0, older versions disable the integration.
- Added a "Wait" action, which pauses the following actions of an event for a chosen duration.
- Added the "Countdown Timekeeper" preset, a speech bubble count to ten ending in sound and sparks.
- Added scaling and rotation for Doppler NPCs behind the "Experimental Features" checkbox. Both only
- Added a "Sound" action, which plays a sound at the NPC with sound category, volume and pitch.
- Added "Every 5 Minutes" and "Every 15 Minutes" to the "Execution Limit" condition.
- Added a "Player Idle" condition, which checks how long a player has not moved.
- Added an "Immovable" attribute, which keeps an NPC in place against pushing and knockback.
- Added
/easy_npc pauseto pause a single NPC or all NPCs; the global pause ends with the server. - Added API access to the sound action, the pause state and the idle time of a player.
- Added a texture override per model slot for Easy Model NPCs over
/easy_npc render texture. - Added a "Repeat" playback mode with a count and a time limit to the "Play Animation" action.
- Added API access to animation variants, texture slots and textures of Easy Model NPCs.
### 7.6.0
- Fixed unclear mod conflict errors for duplicate entity data tracker IDs.
- Fixed third-party health bars rendering over NPC previews in configuration and dialog screens.
- Fixed Doppler and Easy Model Entities NPCs using default hitboxes instead of their model size.
- Fixed the
/easy_npccommands suggesting no NPC UUIDs at all on a server. - Fixed the pose list of the "Set Pose" action drawing over its input field.
- Fixed the untranslated "Loop", "After current" and "Action Data Type" labels of the action editor.
- Fixed the missing hint text of the "Chance" condition.
- Fixed long condition hints running out of the editor screen instead of wrapping.
- Fixed the misaligned help icons and text buttons of the "Message" action.
- Fixed changes to the "Set Pose", "Play Animation" and "Stop Animation" actions not being saveable.
- Fixed the speech bubble text sitting closer to its upper border than to its lower one.
- Changed the NPC suggestions to list the crosshair NPC first and only own NPCs without permissions.
- Changed a preset export to only store what differs from a new NPC, without position or owner.
- Changed a preset without objectives or actions to fall back to the defaults of its NPC type.
- Changed events without a player, like "On Spawn" or "On Kill", to check their conditions. An
- Changed a time based action to pick the owner as
@initiatorwhenever the owner is nearby. - Changed speech bubbles to stay visible from 5 up to 18 seconds, depending on the text length.
- Changed the "Set Pose" action to only show its input field for the "custom" pose entry.
- Added time based actions on five fixed steps, from every ~1 second up to every ~15 minutes.
- Added a "Message" action for chat, system message and speech bubble text without a command.
- Added text variants, a sender name, a recipient and translation keys to the "Message" action.
- Added the speech bubble graphic as
easy_npc:textures/gui/speech_bubble.pngfor resource packs. - Added a "Chance" condition in percent and a "Relationship" condition for owner and faction.
- Added spawn, owner login, state change, day / night, weather and the missing "On Trade" events.
- Added a base preset per NPC type under
easy_npc:api/preset/base/, usable as a parent preset. - Added the "Wandering Companion" preset, a talkative NPC built from time based messages.
- Added an action registry, an action handler, a preset validator and richer event data for mods.
- Added a tooltip with name, type and distance to every NPC suggestion of the
/easy_npccommands. - Improved the NPC suggestions, which appear without typing and tolerate a near miss of one block.
### 7.5.0
- Fixed #814 by giving every Cobblemon NPC its own animation state instead of one per species.
- Fixed #813 by letting "Move back to Home" work at any distance instead of only near its home.
- Fixed #812 by checking once per session whether a player changed their skin.
- Fixed #810 by accepting Cobblemon aspects of resource packs instead of only "shiny" and "female".
- Fixed the home position of an NPC always reading as unset, which hid "Home" in the configuration
- Fixed NPCs spawned from a preset, the preset browser or a respawn never getting a home position.
- Fixed an NPC spawned from the preset browser keeping the home position of the world the preset was
- Fixed NPCs being drawn as a white silhouette with a shadow in the configuration, skin and preset
- Fixed the server crashing when an NPC with a "Tempt" objective ticked its goals.
- Fixed a single or boss spawner spawning without any limit when its preset carried no stored NPC.
- Fixed the "Legacy Easy NPC Data" warning appearing for newly created NPCs.
- Fixed missing transparency corrections for old 64x32 skins, which showed layer artifacts.
- Fixed the player skin screen freezing for a moment while a player name was looked up.
- Fixed the "Reset look at ..." objective label, which read "Reset loot at ..." in some languages.
- Fixed the "No Gravity" attribute being ignored after a preset import, which let NPCs fall.
- Fixed the Fabric game tests, which crashed on start because of the development helper mods.
- Fixed NPCs losing their owner when they were spawned again after a despawn.
- Fixed objectives being deleted from an NPC when the mod providing them was missing at start.
- Fixed importing a preset without a stored id, which spawned an NPC without owner and home.
- Fixed "Follow owner" and "Look at owner" keeping their old target after the owner was changed.
- Fixed attack targets staying assigned to an NPC after the targeted entity was gone.
- Fixed the "Look at Item" objective, which could be stored but never did anything.
- Fixed walking animation for Doppler NPC and 3rd party models.
- Fixed Forge never running its server start-up step, which left NPC tracking, factions and the
- Fixed Forge development runs starting without any mixins, which disabled the vanilla entity
- Changed the movement objectives to a fixed order: flee, follow, return home, then stroll. NPCs
- Changed inserting a preset into a vanilla monster spawner to keep its delay, count and range.
- Changed "Follow owner" and "Look at owner" without a chosen target to follow the owner of the NPC.
- Changed datapack presets to
easy_npc/preset/, the old folder still works, but only for easy_npc. - Changed the preset browser to always list its entries in the same order.
- Removed the experimental user-defined NPCs; the extra config file is no longer read or created.
- Removed the unused
SERVER_SKINskin type. - Added a new game test structure to support game tests in 1.21.11 and higher.
- Added a reload button to each entry of the player skin screen, to fetch a single skin again.
- Added the reason to the log whenever an NPC is removed, so an unexpected despawn can be traced.
- Added suggestions to
/easy_npc render set species. - Added support for presets from other mods, which no longer have to use the
easy_npcnamespace. - Added a preset visibility that hides a preset from the preset browser and the NPC screens.
- Added a teleport distance and a resting spot offset to the follow objectives.
- Added item tags, a "can be scared" option and a "only without owner" option to "Follow item".
- Added an item field to the look objectives, so an NPC can watch a chosen dropped item.
- Added an identifier per NPC, so a mod can find its own NPCs again.
- Added an option to spawn an NPC again when its owner logs in.
- Added game tests for NeoForge, which had none, and restored the spawn egg, dialog screen, data
- Added game tests for every configuration and editor screen, covering all three mod loaders.
- Added game tests for the home position, covering the spawn default, the stored value and
- Improved the model name parsing, which mistook a species ending in "_shiny" for a variant.
- Improved following of flying NPCs, which now steer directly when there is no path through the air.
- Improved third party support with an API for presets, own objectives and objective configuration.
### 7.4.0
- Fixed #807 by no longer pulling every same-type NPC within 32 blocks into a "Defend Self" fight.
- Fixed #805 by evaluating all visibility settings together instead of stopping at the first one.
- Fixed #804 by keeping the custom name on Doppler NPCs for name based textures and the name tag.
- Fixed #803 by adjusting assets to match typical Minecraft style instead of generic UI style.
- Fixed the day and night detection, which counted sunrise as night and sunset as day.
- Fixed the visibility in the Nether and the End, which used the Overworld time.
- Fixed the time and game mode visibility checkboxes appearing in a random order.
- Fixed game tests only being able to fail on their first assertion, which hid later failures.
- Fixed the "Saddled" horse skin variants, which never showed a saddle.
- Changed "Visible to Owner" and "Visible to Team" to also follow day, night and game mode.
- Changed Evoker, Illusioner and Vindicator variants without "Crossed Arms" to keep their arms down.
- Added a "Defend Faction" objective that attacks whoever hurt a nearby faction member or player.
- Added a system message when faction members fight each other and the faction stays out of it.
- Added a head equipment slot for Illagers so their captain banner can be removed or swapped.
- Added a day and night preview to the display configuration screen.
- Added unit and game tests for the visibility attributes and the faction defense.
- Improved the visibility check performance by reading the display attributes only once per check.
- Improved display attributes from older versions by completing them with their defaults.
- Improved the attack objective screen by disabling "Protect Owner" and "Defend Faction" when unset.
### 7.3.0
- Improved skin variants by carrying their data as typed fields instead of parsing variant names.
- Centralized the Cobblemon mod id and default model on shared constants.
- Reduced duplicated enum code with a shared
EnumUtilshelper forget(String)lookups. - Optimized villager profession and type lookups to use direct registry keys instead of scans.
- Optimized enum name lookups by caching tag names, ids and keys once at construction.
- Added unit and game tests for skin variants, villager resolution and the enum helper.
### 7.1.2
- Fixed #801 by using combination for NPC, Dialog and Action UUIDs to avoid collisions for action
### 7.1.1
- Fixed #800 by lazy loading entity types.
- Fixed #799 by fixing edge cases and adding additional documentation and better log messages.
- Fixed #798 by considering console, commands and command blocks as trusted command sources.
- Fixed a critical single-player / LAN issue where client and server NPCs shared the same registry.
- Fixed a memory leak in the configuration menu handling and added timeout and disconnect cleanup.
- Fixed duplicate downloads when several NPCs request the same skin at the same time.
- Fixed skin lookups failing after a error so a slow server no longer freezes the game.
- Fixed the URL skin screen freezing the game while checking a remote image; the check now runs in
- Added a new World Spawner block that limits an NPC preset across the whole world (all dimensions),
- Hardened remote skin downloads with a strict size limit and safe redirect handling to prevent
blockPrivateAddresses setting.- Improved server performance by only sending entity and player load events to NPCs that actually
### 7.0.0
- Fixed #794 by using the expected type for NPC rendering.
- Fixed scaling screen preview by pinning the entity feet to the 0 line of the scale ruler, so NPCs
box updates.
- Fixed #791 by adding Wandering Trader NPC type.
- Fixed #788 by extending the AI safeguards to Epic Fight and raw NPC variants (Piglin, Villager,
- Fixed #787, #531, #237 and #184 by adding a faction system with
/easy_npc factioncommands,
- Fixed #787, #771 and #572 by adding a new
targetobjectives tab to attack hostile factions or
- Fixed #786 by adding gender and shiny model variants for Cobblemon NPCs, searchable via
female
shiny in the model selection.- Fixed faction combat between invulnerable NPCs by adding the new
Attackable by Factionscombat
- Fixed Cobblemon model selection previews for oversized species by scaling with Cobblemon's own
- Fixed faction management edge cases by validating faction names, sorting faction lists and
- Fixed custom skin reloads by loading and clearing texture caches per skin model instead of always
- Improved the
Attackable by Players/Monsters/Factionscombat attributes to work independently of
Invulnerable, each opening a targeted hole for its own attacker group.- Improved preset command and network handling by splitting the large handlers into smaller focused
- Added Easy Model Entities Support.
- Added faction manager and faction editor screens to create, color and delete factions and manage
FACTION_MANAGEMENT security feature.- Added new
Miscattributes tab as home for the NPC faction assignment. - Added reusable warning and help icon components for inline hints with tooltips.
- Added additional unit and game tests for factions, target objectives and Cobblemon model variants.
### 6.25.0
- Fixed #782, #636, #622 by preserving data components during validations.
- Fixed #780 by caching remote texture downloads and reducing duplicate registrations.
- Fixed #767 by clamping attribute sliders against extreme values from other mods.
- Fixed #754 by adding custom data item matching for NPCs with actions and conditions.
- Fixed texture manager running in the wrong thread may cause crashes and deadlocks in >= 1.21.x.
- Fixed empty UUID handling for action conditions.
- Fixed execution limit reset for actions.
- Added texture registration queue to avoid multiple simultaneous downloads in the same tick.
- Added NPC coin, key and red token as consumable items for NPCs with actions and conditions.
- Added
Welcome Coin Traderas example NPC preset with custom coin, key and red token item data. - Added attribute safeguards against extreme values from other mods.
- Increased fallback max health value from 1024 to 4096 for high-health NPCs.
- Improved texture manager by reducing duplicate texture checks and registrations.
### 6.24.0
- Fixed #459, #775 by adding an option to block interactions with invisible NPCs.
- Fixed #774 startup crash related to optional Epic Fight and Cobblemon entity type maps.
- Fixed #773 by checking timed trade resets during base ticks and before opening trade screens.
- Fixed trade reset timing by increasing internal tickers correctly.
- Added time of day and weather conditions for #459.
- Added additional unit and game tests for trade resets, ticker handling and entity attributes.
- Added
Skywatch Scoutas example NPC preset with time of day and weather conditions.
### 6.23.0
- Fixed #774 by migrating isSunBurnTick error to 26.x.
- Fixed #772 by adjusting texture retries with 403 and 404 errors and lowering logging.
- Fixed #770 item rendering for Epic Fight NPCs (Evoker, Pillager, Vindicator and humanoid skins).
- Fixed #769 door loops with NPCs not reliably opening or closing doors.
- Fixed #760 by adding a dialog option and config setting (buttonConditionMode: LOCK or HIDE) to
- Fixed #709 by adding color picker popup for names with 32 colors and/or a manual RGB/hex value.
- Fixed NPC name color being reset when renaming without a specified color by preserving the
- Improved the door movement attributes so "Pass Door" is automatically enabled while "Open Door"
### 6.22.0
- Fixed #766 by passing the full server player context to command execution for better compatibility
- Fixed #764 by adding entity health, npc health conditions and NPC preset
Grukk, the Sparring Post as example for using these conditions.- Fixed #763 by making sure dialog button execution limits are now recorded.
- Fixed #758 by providing a example NPC preset named
One Wish Companion. - Fixed crashes related to 3rd party villager AI reading non-registered brain memories on Easy NPC
- Fixed Dialog buttons are not locked for server-side data as preparation for #760 and #644.
- Fixed #628 by adding conditional dialog opening support / command for better control over when
- Added brain AI for Piglin and Piglin Brute NPCs and registered the full vanilla brain memory set.
- Added additional guns to the gun tag for #757.
- Added a new "Open Dialog (Conditional)" action that opens a named dialog only if its conditions
- Added new entity health and npc health conditions for actions, dialogs and dialogs buttons.
- Added Piglin, Piglin Brute and Zombified Piglin NPCs invulnerable, for consistency with other
- Added a new "Knockback Immunity" combat attribute that prevents the NPC from being knocked back by
- Added a new "Explosion Immunity" combat attribute that makes the NPC immune to explosion damage
- Moved the "Projectile Collision" attribute to the Combat attribute screen, where it fits better
### 6.21.0
- Fixed item attachment for Illagers in crossed-arms pose.
- Fixed broken illager crossbow attack goal.
- Fixed crashes related to 3rd party items which are not renderable as hand items #756.
- Fixed crashes related to 3rd party mixins trying to access non-existing model parts #756.
- Fixed log.info spam message by reducing log verbosity and adding additional checks for custom
- Improved EasyNPCModelManager performance.
- Refactored NPC renderers to remove default hand item layer.
### 6.20.0
- Fixed crashes related to 3rd mods trying to access non-existing NPCs goals.
### 6.19.0
Note: This update adjusted the dialog background images by 10x6 pixels, which may require users to
adjust their custom dialog backgrounds if they are using custom ones.
- Fixed #752, #130 by adding dialog button condition support to allow to disable buttons.
- Fixed #683, #215 by adding typewriter effect support for dialog text.
- Fixed #690, #309 by allowing conditions for dialog, dialog buttons and interactions.
- Fixed smaller UI issues with dialog screen layout and background.
- Refactored dialog background images by 10x6 pixels on each side.
- Refactored dialog screen layout to better fit the new background size and improve appearance.
- Added typewriter effect and client configuration for dialog text.
- Added condition symbols to indicate the condition status for dialog, buttons and interactions.
- Added amount field for item conditions to allow checking for specific amounts of items.
- Added
Threshold Wardenas example NPC preset with various conditions and actions. - Added smaller bug fixes and optimizations related to dialog conditions and button states.
### 6.18.0
Note: This update changes the internal data format for conditions and actions, which may reset /
remove legacy existing execution-limit entries without stored IDs.
- Fixed #745 by adding conditions for actions to allow more complex and dynamic behavior.
- Fixed #652 by adding dialog button tooltip for longer texts.
- Fixed #687 by adding command value tooltip to show the full value.
- Added Experience Level conditions.
- Added Game-mode conditions.
- Added has item in inventory condition.
- Added has item in hand condition with (main hand and off-hand) support.
- Added player health condition.
- Added player tag condition.
- Added player team condition.
- Added Goldmere example NPC preset with various conditions and actions.
- Added negative condition support to allow negating conditions for more complex logic.
- Removed parameter pseudo IDs for
ActionDataEntryand replaced them with random UUIDs. - Refactored condition system to allow more condition types.
### 6.17.0
- Fixed #738 by adding additional tooltips for "Execute as player"
- Fixed to detailed logs by reducing log.info messages during startup and in-game.
- Added additional unit and game-tests.
### 6.16.0
- Fixed #732 by providing option to disable ESC key and close button for dialogs.
- Fixed #723 by avoid auto-close in specific cases like trading screens.
- Added general dialog configuration options to allow users to customize dialog behavior.
- Added avatar scaling and position offset options for dialogs.
- Added missing translation keys.
### 6.15.1
- Fixed #735 by extending the correct base class.
- Fixed several 26.1.2 specific issues from manual spawn testing.
### 6.15.0 (Trades, Player Heads, Epic Fight and QOL updates)
- Fixed #731 by resyncing species data, if species list is empty on the client.
- Fixed #730 by improving Epic Fight integration and enabled experimental features.
- Fixed #729 by making sure trade uses are stored correctly.
- Fixed #728 by adding custom head support for player heads.
- Fixed #689 by showing remaining trade uses and allow resetting manually and automatically.
- Fixed #218 and #132 with new trade configuration screen and better support for custom trades.
- Fixed trade specific edge by switching between basic and normal/advanced trading mode.
- Fixed dialog button text is truncated with tooltip showing the full text.
- Fixed Cobblemon animation issues by syncing animation state with Cobblemon Animation System.
- Added per trade specific actions to allow users triggering actions after buys.
- Added trade reset button to reset all trades easily.
- Added trade usage information to trade configuration screen.
- Added experimental feature state to allow users to manually enable experimental features.
- Added Griselda Grindstone as example trader with actions.
- Cleanup test files.
### 6.14.0
- Fixed #727 by making sure changes are synced to the client when changing values.
- Fixed #726 by adding additional allow lists for specific commands.
- Fixed #686, #389, #304, #211 by adding basic Cobblemon support with Cobblemon NPC.
- Fixed dialog misalignment and navigation issues by adjusting dialog sprites and screens.
- Fixed x and z root rotation by correcting rotation logic and pivot calculations.
- Added basic Cobblemon support with custom NPC type and model for testing.
### 6.13.0 (Security and Permissions Updates)
Notes: This update includes better security checks and permissions for multiplayer environments. It
allows to execute server commands which can be potentially dangerous if used with malicious intent.
- The update splits the model root data and logic from the rest of the model part data and logic,
- Fixed #725 by separating model root data and logic from the rest of the model part data and logic.
- Fixed #722 by supporting .sbnt files as local presets.
- Fixed #675 by adding dedicated assets for dialog and config screen backgrounds.
- Fixed #605, #532, #529 with new security checks and permissions system.
- Fixed #469, #311 by adding experimental api documentation and examples for custom model support.
- Fixed double rendering of config screen background by removing redundant background rendering.
- Fixed Ghast and Slime hitbox and name tag position issues by adjusting bounding box.
- ⚠️ Added security checks to prevent potential exploits and allow safe usage in multiplayer
- Replaced dynamic dialog screen background with a static one for better performance, customization
- Replaced dynamic config screen background with a static one for better performance.
- Refactored config-ui specific components and removed them from the core mod.
- Removed duplicated sprite sheets.
- Prepare permission system for possible Luck Perms integration in the future like #712.
- General code cleanup and optimizations related to config screen rendering and assets.
### 6.12.0
- Fixed #714 by adding additional checks for custom model part list based on vanilla models.
- Fixed #713 by reducing log verbosity with downgraded per-NPC INFO messages to DEBUG and
- Fixed #711 by reduced oversized startup/config log output.
- Fixed NBT validation guard to prevent unnecessary buffer allocations in production.
- Added model part name constants to EasyNPCModelManager for consistent usage across mixins.
- Improved RenderEntityTypeSupportConfig by enhancing filter logic and optimizing data structures
- Removed verbose debug logs that dump large data structures.
### 6.11.1
- Fixed #710 by improving backward-compatible parsing for recoverable trade data.
### 6.11.0
- Fixed #703 rendering issue with new custom layer system and hand renderings.
- Fixed #701 by adding additional safeguards and logging for invalid trading offers.
- Fixed smart animation not working properly with modified head position.
- Fixed head tracking by moving player detection back to server side-only.
- Fixed CustomLookAtPlayerGoal to better handle edge cases and reduce jitter.
- Fixed issue with Doppler NPCs keeping their hand inventory.
- Improved PoseManager logging message.
- Updated logo with a new design.
### 6.10.0
- Fixed #698 by adding try and catch for 3rd party entity creation.
- Fixed #695 by clearing model part rotations/positions when switching to a
DEFAULTvanilla pose. - Fixed #695 by applying lock rotation and pose animation only when the NPC is idle.
- Fixed #695 by correcting root rotation pivot to use actual bounding box height instead of 0.5f.
- Fixed multiple objective registration issues including inverted
isTargetedPlayercheck, wrong
targets.
- Fixed goal reference being retained after objective is unregistered.
- Removed auto-lock of ROOT rotation when loading poses; root lock is now user-controlled.
- Added lock rotation checkbox to the advanced and custom pose configuration screens.
- Added model-specific pose key filtering in
ConfigurationMenuHandlerfor the default pose screen. - Added unit tests for
CustomPosition,CustomRotation,CustomScale,ModelPose,
ModelAnimationBehavior and ModelAnimationData.- Added
NPCDataIsolationTestHelperand game tests for Fabric and Forge. - Increased max head yaw range from 60° to 65°.
### 6.9.0
- Fixed #692, #666 by adding caching and safeguards to prevent redundant retriggering of NPC entity
- Fixed #651, #617 by adding basic custom poses for all supported NPC types.
- Fixed #597 by adding additional Flee goals for fleeing from players, villagers, monsters, ...
- Fixed pose loading to read directly from mod resources instead of copying files to disk.
- Fixed duplicate
saveNPCcalls on entity join by checking existing registry entry first. - Added
despawnandspawncommands to remove and re-spawn NPCs by UUID with configurable removal
- Added
ModelPoseAPIandEasyNPCEntityHandlerpublic API classes for controlling NPC poses and
- Added pose data files for all supported NPC types.
- Added lock rotation checkbox to the basic pose configuration screen.
- Added
MoveToPositionGoalto move an NPC to a position before executing a callback action. - Added
EasyNPCLookControlandEasyNPCBodyRotationControlto respect locked root rotation. - Added synced owner change and dimension change to the NPC entity data index.
- Added EasyNPCItemAttachmentLayer into various entity renderers.
- Added dedicated
Flee Objectiveconfiguration tab with objectives for fleeing creepers, monsters,
- Added
FOLLOW_ITEMobjective to the follow objectives tab to make NPCs follow item entities by
minecraft:apple).- Added
LookAtEntityByUUIDGoaland enabled the look-at-entity-by-UUID and look-at-owner objectives
- Added
persistentflag toSynchedDataIndexso that transient indices (e.g. crossbow charge,
- Added configurable
customParticlesEnabledflag toSlimeBasefor API consumers. - Added
SoundType.PETand mappedCAT_PURRto the cat NPC for tamed ambient sound variety. - Reduced log verbosity for periodic NPC save operations from INFO to DEBUG.
### 6.8.3
- Fixed #680 by enforcing version miss-match by upgrading network protocol version.
- Fixed #679 by resetting position, rotation and size for name tag.
- Fixed #665 by adding multi state slide for root rotations.
- Fixed #664 by adding option to disable following mouse cursor for easier posing.
- Fixed #663 by improve support for X and Z root rotations.
- Fixed #661 by adding quick rotation with NPC wand and sneaking to the NPC to rotate the root to
- Fixed move tool is wrongly triggering interactions by adding check for move tool in interaction
- Fixed Preset Item is wrongly triggering interactions by adding check for preset item in
- Fixed Slime and Ghast hitbox and name tag position issues by adjusting bounding box and eye height
- Fixed Slime and Ghast GUI position by adjusting offset values.
### 6.8.2
- Fixed #677 by extending
SafeMerchantDatawith notifyTrade to avoid crashes. - Added progression data support for leveling up NPCs based on player interactions and actions.
- Added global NPC tracking system for better management and debugging of NPCs across the world.
- Added
OriginalModelConfig.withVariantTexture()option to allow using variant textures with the
### 6.8.1
- Fixed #676 by using existing preset helper method instead of custom one.
### 6.8.0 (Adding API support)
- Fixed #667 by adding warning messages and additional checks for invalid network packets.
- Fixed Horse spawn eggs model.
- Fixed pose support for allay, chicken, creeper, fox, ghast, horse, illager, iron golem, slime and
- Added NPC base classes for better API support.
- Added NPC raw classes for advanced API support.
- Added Slim and Ghast NPC types.
- Added Custom Model API for easier integration with other mods and custom models.
- Refactored internal data handling and registration for better maintainability and future
### 6.7.1
- Fixed #657 and #656 by adding additional client side checks for vanilla bug.
### 6.7.0
- Fixed #650 by implementing Wolf Leg Animations in setupAnim method.
- Fixed #648 by fixing canBeHitByProjectiles translation.
- Fixed #645 by adding
allowBypassInvulnerabilityconfig option to allow/deny bypassing
- Fixed delete button showing label even with small width.
- Fixed up and down buttons not positioned correctly in some cases.
- Fixed name tag showing up for dialog and configuration UI.
- Fixed distance action issue were multiple actions are not properly triggered.
- Fixed issues with NPC presets.
- Fixed Cat NPC and Wolf NPC owner data not syncing properly.
- Added preset browser for easier selection of common NPC presets.
- Added preset .snbt (text) export and import functionality for sharing NPC presets.
- Refactored existing NPC presets to use new .snbt format.
- Refactored spawner system to use new preset format for better maintainability and future
### 6.6.2
- Fixed #643 by rework scaling system.
- Fixed scaling not properly updating hitbox and nametag position after restart / reload.
- Added MID and MOUSE_OVER name tag visibility modes for finer control over NPC name display.
- Added team-based name tag visibility support respecting vanilla Team.
### 6.6.1
- Fixed #638 by refactored internal data handling for display attributes.
### 6.6.0
- Fixed #634 by implementing asynchronous texture loading with dedicated thread pool.
- Fixed texture loading blocking render thread causing game freezes.
- Fixed race conditions in texture reload protection using atomic operations.
- Fixed resource leaks in HTTP connections during remote texture downloads.
- Fixed URL validation spam allowing multiple simultaneous downloads of the same texture.
- Fixed exception handling for remote image validation preventing crashes on invalid URLs.
- Fixed
defineId called for:warning messages during NPC loading. - Refactored texture loading architecture with multi-level defense and rate limiting.
- Refactored entity data registration logic for better maintainability.
- Converted data classes to modern Java records for better immutability and thread-safety.
- Added thread-safe session server spam protection with ConcurrentHashMap.
- Added comprehensive error recovery with automatic cooldown reset on failures.
- Improved texture loading with 2-thread pool and 500ms rate limiting.
- Improved exception handling with specific catch blocks for IIOException and FileNotFoundException.
### 6.5.2
- Fixed Villager profession and job skin issue.
- Improved GitHub workflows by adding cache for gradle dependencies.
- Improved Gradle build time and cleanup tasks.
### 6.5.1
- Fixed #632 by implementing ON_KILL action type and event.
- Fixed #629 by improving texture handling performance, caching, and memory usage.
- Fixed kill command is not working on NPCs.
- Fixed texture reload protection preventing cache reload after eviction.
- Fixed WebP validation bug in remote image validator (missing return statement).
- Refactored texture handling logic for better maintainability and future improvements.
- Added time-based reload protection (60 seconds) to replace permanent blocking mechanism.
- Added missing variant textures for chicken, pig and wolf.
- Added additional unit tests for texture handling.
- Improved gradle build tasks.
### 6.5.0
- ⚠️ Removed jar-in-jar bundle approach for better mod compatibility and api capabilities.
- Fixed #627 scissor implementation for better compatibility with other mods.
- Fixed #625 lively animation issues when using rotated or moved model parts.
- Fixed default animation are canceled when using scaled model parts.
- Added better pose animation control with smart, default und none options.
### 6.4.1
- Fixed #626 screen switching logic for different NPC UUIDs, thanks to
Spawnbladefor the detailed
### 6.4.0
- Fixed #626 by improving dialog data validation and error handling.
- Fixed #623 by refactoring render data and render handling.
- Fixed #622 by making sure custom data are properly saved and loaded.
- Fixed open dialog action type to allow opening dialogs from other NPCs.
- Fixed hashing issues by adding missing equals and hashCode methods for ConditionDataSet and
- Added custom data test item for #622 and easier testing of custom data.
- Improved records and fixed potential issues with missing data.
### 6.3.0
- Refactored config ui specific components and removed them from the core mod.
- Fixed dialog data by filtering dialog data before sending to the client.
- Fixed dialog editor layout issues and improved usability.
- Fixed missing default values for some dialog data fields.
- Added dialog priority support to control the order of dialog execution.
- Added condition support for dialog and scoreboard actions.
- Added frequency support for dialog to limit how often an dialog can be shown.
- Added new NPC preset to for scoreboard and condition support.
- Improved dialog button data format by removing redundant fields.
### 6.2.0
- Fixed legacy custom name parsing.
- Fixed string injection within dialogs.
- Fixed missing translation for action types.
- Added scoreboard action type to increase, decrease, set scoreboard values.
- Added
@score(...)NPC macro to display scoreboard values in the dialog. - Added additional unit tests.
- Improved spin button with indicators and better usability.
### 6.1.2
- Fixed container and menu sync issues with missing close container packets.
- Fixed close button not working in some cases.
- Fixed jumping mouse cursor between screen transitions.
- Fixed translation files and removed duplicate and deprecated entries.
- Moved Easy NPC wand to existing core item tab instead of creating a new one.
- Added cat pose support for different model parts (except tail).
- Improved EasyNPCWand glowing effect performance by disabling it when not needed.
- Improved custom entity detection by excluding non-living entities like displays, makers, throwns
- Improved cat variant handling.
### 6.1.1
- Fixed #615 by checking if item is equipped in one of the hands.
- Fixed #612 by re-validating entity types.
- Fixed #610 by force sync of hat and head layers for specific models.
- Fixed orc textures.
- Fixed cat variant handling for 1.21.5.
- Fixed player render by adjusting render state
skinfield. - Fixed cat renderer by adjusting render state
texturefield. - Fixed position, scaling and rotation preview.
- Fixed Fairy model.
- Improved custom model support and performance, by moving related logic into to client side only.
- Improved caching of player to UUID mappings for player skins.
- Limited change model commands and logic to Doppler NPCs only.
- Added renderEntityRaw method to render NPC as-it-is.
### 6.1.0 ✨
This is a major release. Please back up your worlds and NPC data before updating. This version
contains many improvements, optimizations, and internal changes that are **not fully compatible**
with earlier releases.
⚠️ Breaking changes
- Existing NPCs and their configuration data from versions before 6.1.0 may not load correctly or
- Internal data formats and some behaviors have been refactored to support new use-cases.
🧩 New modular structure
Easy NPC is now split into three separate mods:
- Easy NPC** – Bundle that includes both Core and Configuration UI for a plug‑and‑play experience.
- Easy NPC: Core** – Lightweight runtime and logic for NPCs, with minimal dependencies. Intended
- Easy NPC: Configuration UI** – Standalone configuration interface for creating and editing NPCs.
🎯 Why this change?
- Allows servers and modpacks to ship only the **Core** mod on the server side for a leaner setup.
- Reduces memory usage and load times when the UI is not required everywhere.
- Makes development and testing faster by separating UI and core logic.
[history]: https://github.com/MarkusBordihn/BOs-Easy-NPC/commits/
[upgrade_guide]: https://github.com/MarkusBordihn/BOs-Easy-NPC/wiki/Upgrading
## Note
This change log includes the summarized changes. For the full changelog, please go to
the [GitHub History][history] instead.
Note: Please always back up your world / NPCs before updating to a new version!
Check the [upgrade guide][upgrade_guide] for more information.
### 7.14.0
- Fixed #846 by keeping custom poses for players who start seeing the NPC later.
- Fixed attribute and trading settings missing for players who start seeing the NPC later.
- Fixed changed max uses, XP and trading type not shown in the trading screens until reload.
- Fixed
/easy_npc sound setchanges not reaching players until the NPC was reloaded. - Added game tests that check NPC poses and settings after respawns and for new players.
### 7.13.0
- Fixed color and formatting tags in dialog button names showing as plain text.
- Fixed the button preview in the editor showing lowercase names as a raw translation key.
- Fixed the "Move EasyNPC" item not working for NPC owners outside of creative mode.
- Fixed
/easy_npc owner setreporting success even when the owner could not be changed. - Fixed the game crashing when the URL or player skin screen showed a skin download error.
- Fixed the preset browser search showing no results after scrolling down the list.
- Changed the network protocol version, so client and server must run the same mod version.
- Added
@initiator,@npcand@score()support to dialog button names to fix #841. - Added automatic client tests with the Client Runtime Interface Toolkit.
- Larger core refactoring and code cleanup.
### 7.12.2
- Fixed the Fairy hitbox being far too small, so its name tag and speech bubble sat in its body.
- Fixed scaled NPCs keeping their old hitbox and eye level, so hits, clicks and looking missed.
- Fixed oversized names, lists and NPC data in network packets being read without any limit.
- Fixed invalid NPC positions, scales, attributes, names and durations from being applied.
- Changed Fairy NPCs to take up the space of their model, so they collide and can be clicked.
- Changed Skeleton, Stray and Bogged NPCs to the vanilla hitbox height, they were slightly short.
- Changed the network protocol version, so client and server must run the same mod version.
### 7.12.1
- Fixed #836 by always showing "Restore", including datapack presets, with a reason tooltip.
- Fixed preset import and export messages missing, wrong or not warning about replaced NPCs.
- Fixed the preset browser reloading on each keystroke, leaking NPCs and clearing the selection.
- Fixed selection box drop-down lists being covered by the checkboxes and labels behind them.
- Fixed the preset list sorting, filter order and layout clipping options in small windows.
- Fixed
/easy_npc preset import datawithout a position importing it as a default preset. - Fixed spawn rate limit leaks, unstable preset IDs and "Spawn New" stacking NPCs on one spot.
- Changed "Restore" to refuse instead of spawning a copy when it is not permitted.
- Added sorting, a match count, reload, auto-close, the NPC ID and tooltips for presets and skins.
- Added
matching <pattern>batch imports with limits, a confirmation and a clickable position.
### 7.12.0
- Fixed #833 by showing Easy NPC Wand outlines only to the wand holder, owner and admins.
- Fixed #834 by adding "Set Home Here" and "Reset Home" buttons to the position configuration.
- Fixed #835 by keeping the NPC ID and position in exported presets, so imports restore the same
- Fixed preset imports and spawn eggs losing the owner's list entry and owner objectives.
- Fixed NPCs restored from an automatic backup losing their owner and becoming ownerless.
- Fixed selection lists showing only their first six entries and hiding the rest.
- Changed importing a preset to update the original NPC at its stored position instead of adding a
- Changed completed trades to play the "Trade completed" sound, which stayed silent before.
- Changed the API dialog call to report an unknown dialog label instead of always reporting success.
- Changed NPCs without arms to carry held items at the head or body instead of hiding them.
- Changed the optional Easy Model Entities dependency to require version 2.4.0 or newer.
- Added a "Sound" configuration with sounds for dialogs, speech, swimming, eating and fall damage.
- Added a searchable sound selection with volume and pitch sliders to the "Sound" configuration.
- Added a "Block Vehicles" option to keep NPCs out of boats, minecarts and modded chairs.
- Added the profession selection to all skin configurations and a new built-in skin per NPC type.
- Added client settings to hide name tags behind walls and
highlightEnabledfor wand outlines. - Added an "Exists" condition operation and API access to NPC movement, actions and presets.
### 7.11.0
- Fixed #828 by no longer freezing the server on logout when NPCs follow or watch the player.
- Fixed #831 by moving routine NPC removal messages to the debug log.
- Fixed #832 by making humanoid NPCs ignore custom player models, animations and poses.
- Fixed hourly NPC backups stuttering on large worlds and retaining timestamps of removed NPCs.
- Fixed hourly NPC backups losing the identity, owner and position of the backed-up NPC.
- Fixed owner-login restoration duplicating, repeatedly restoring, reviving or moving unloaded NPCs.
- Fixed NPC index and file synchronization issues causing lost NPCs, crashes or false warnings.
- Fixed stale NPC data after unloading, avoided redundant writes and added repeated-unload warnings.
- Fixed the preset browser failing to list custom and world presets saved in the SNBT format.
- Fixed speech bubbles losing their text and turning translucent with Iris shaders.
- Fixed the "Opacity" of an NPC being ignored while a shader pack is active.
- Fixed text formatting and macro parsing for translated speech bubbles and mod API texts.
- Fixed speech bubbles and their text staying hidden behind blocks while a shader pack is active.
- Added
minLightLevelto keep speech bubbles readable in dark surroundings.
### 7.10.0
- Fixed #829 by allowing bats and other non-walking mobs as the render entity of a Doppler NPC.
- Fixed the Wandering Trader NPC rendering without its texture.
- Fixed NPCs rendered as a bat, frog or warden showing a static pose instead of their animation.
- Fixed the NPC name tag showing above the previews in the "Custom Models" configuration.
- Fixed speech bubbles being cut off by walls, doorframes and the NPC's own body.
- Fixed the previews in the "Custom Models" configuration.
- Changed the previews in the "Custom Models" configuration to stand on a common ground line.
- Changed overlapping speech bubbles to move apart and to stay visible when the NPC is off-screen.
- Changed "Navigation: Automatic" to use flying movement for NPCs rendered as a flying mob.
- Changed the render entity list to hide seats, paintings, thrown items and other non-mob entities.
- Added a "Min. hover height" slider for flying NPCs and client settings for speech bubbles.
### 7.9.0
- Fixed modded fish NPCs, like the ones of Tide 2, spinning around instead of swimming upright.
- Fixed "Navigation: Automatic" using ground movement for water NPCs and aquatic model NPCs.
- Fixed the "Random Swimming" objective never moving an NPC that uses aquatic navigation.
- Fixed a swimming NPC shaking or twitching in place instead of holding its tilt and swim depth.
- Fixed a swimming NPC turning in circles forever when it could not reach its next path point.
- Fixed an NPC that fell into water never getting out of it again.
- Fixed a following NPC searching a new path every tick while its target was unreachable.
- Fixed the "Move to" actions stopping short of a raised target or not starting while in the air.
- Fixed "Move back to Home" ignoring height differences and never returning from beyond 32 blocks.
- Fixed the "Opacity" input field being too narrow to show a value of 100.
- Fixed a damaged NPC with an Easy Model Entities model never flashing red.
- Changed modded water NPCs to swim level, vanilla water mobs keep their tilt as before.
- Changed the "Move to" actions to walk up to 48 blocks and to teleport only beyond that range.
- Changed "Move to" and "Move back to Home" to give up after three seconds without progress.
- Changed the timeout of a "Move to" action to count real ticks, it ran twice as long before.
- Changed a new "Random Swimming" objective to rank below following, fleeing and attack goals.
- Changed "Opacity" of an NPC with an Easy Model Entities model to be applied by that mod itself.
- Changed the minimum Easy Model Entities version to 2.3.0, older versions disable the integration.
- Added "Depth below surface" and "Height above floor" sliders for the swim level of an NPC.
- Added log entries for the NPC files written on a world save, with a warning above 250 ms each.
### 7.8.1
- Fixed #827 by rendering fish NPCs in water upright instead of always flopping on their side.
- Fixed #828 by keeping a damaged NPC from blocking the world save, it now falls back to defaults.
- Fixed a restored NPC picking up a random preset ID that changed with every save.
- Changed NPC data to only be written to disk when it actually changed.
### 7.8.0
- Fixed smaller text and UI issues.
- Changed an NPC that is already standing at its target position to finish the movement right away.
- Changed the "None" skin tab to "Advanced", which now holds "Disable Skin" and the texture field.
- Changed the minimum Easy Model Entities version to 2.2.0, older versions are no longer accepted.
- Added a "Move to" action, which sends an NPC to a position, a player, its owner or its home.
- Added a "Move to and Wait" action, which runs the following actions only after the arrival.
- Added an arrival radius, a timeout and an optional teleport to both move actions.
- Added an "Opacity" attribute from 0 to 100, which fades body, armor and hand items together.
- Added a "Set Opacity" action, which turns an NPC into a ghost or hides it completely.
- Added the "Lantern Wraith" preset, a ghost walking a square with a short line at every corner.
- Added API access to the move actions and the opacity of an NPC.
- Added a "Resource Location" skin type, which renders any texture of a mod or a resource pack.
- Added an "Advanced" skin tab, which previews the NPC with the entered texture before applying it.
### 7.7.7
- Fixed #821 by keeping the transparency of 64x64 skins, which Fresh Moves needs for its eyes. Skins
- Fixed #818 by running trade actions for Villager and Wandering Trader NPCs as well.
- Fixed a dialog with several text variants switching its speech bubble size every second.
- Fixed the skin cache storing the processed image instead of the original download.
- Fixed the untranslated interval names, like
PER_DAY, of the "Execution Limit" condition. - Fixed the
sitanimation of Easy Model NPCs, which never used the built-in sitting pose. - Fixed the speech bubble being cut off by the head of an NPC when a player stood close to it.
- Changed speech bubbles to keep their screen size and to move down or aside when a player is close.
- Changed the speech bubble text to render 20% larger than a name tag.
- Changed a time based action set with a "Wait" action to run in order instead of picking one entry.
- Changed dialog texts to wrap later, so an existing dialog can switch to the wider screen layout.
- Changed fallback actions to skip screen actions without a player, like the regular actions do.
- Changed the minimum Easy Model Entities version to 2.1.0, older versions disable the integration.
- Added a "Wait" action, which pauses the following actions of an event for a chosen duration.
- Added the "Countdown Timekeeper" preset, a speech bubble count to ten ending in sound and sparks.
- Added scaling and rotation for Doppler NPCs behind the "Experimental Features" checkbox. Both only
- Added a "Sound" action, which plays a sound at the NPC with sound category, volume and pitch.
- Added "Every 5 Minutes" and "Every 15 Minutes" to the "Execution Limit" condition.
- Added a "Player Idle" condition, which checks how long a player has not moved.
- Added an "Immovable" attribute, which keeps an NPC in place against pushing and knockback.
- Added
/easy_npc pauseto pause a single NPC or all NPCs; the global pause ends with the server. - Added API access to the sound action, the pause state and the idle time of a player.
- Added a texture override per model slot for Easy Model NPCs over
/easy_npc render texture. - Added a "Repeat" playback mode with a count and a time limit to the "Play Animation" action.
- Added API access to animation variants, texture slots and textures of Easy Model NPCs.
### 7.6.0
- Fixed unclear mod conflict errors for duplicate entity data tracker IDs.
- Fixed third-party health bars rendering over NPC previews in configuration and dialog screens.
- Fixed Doppler and Easy Model Entities NPCs using default hitboxes instead of their model size.
- Fixed the
/easy_npccommands suggesting no NPC UUIDs at all on a server. - Fixed the pose list of the "Set Pose" action drawing over its input field.
- Fixed the untranslated "Loop", "After current" and "Action Data Type" labels of the action editor.
- Fixed the missing hint text of the "Chance" condition.
- Fixed long condition hints running out of the editor screen instead of wrapping.
- Fixed the misaligned help icons and text buttons of the "Message" action.
- Fixed changes to the "Set Pose", "Play Animation" and "Stop Animation" actions not being saveable.
- Fixed the speech bubble text sitting closer to its upper border than to its lower one.
- Changed the NPC suggestions to list the crosshair NPC first and only own NPCs without permissions.
- Changed a preset export to only store what differs from a new NPC, without position or owner.
- Changed a preset without objectives or actions to fall back to the defaults of its NPC type.
- Changed events without a player, like "On Spawn" or "On Kill", to check their conditions. An
- Changed a time based action to pick the owner as
@initiatorwhenever the owner is nearby. - Changed speech bubbles to stay visible from 5 up to 18 seconds, depending on the text length.
- Changed the "Set Pose" action to only show its input field for the "custom" pose entry.
- Added time based actions on five fixed steps, from every ~1 second up to every ~15 minutes.
- Added a "Message" action for chat, system message and speech bubble text without a command.
- Added text variants, a sender name, a recipient and translation keys to the "Message" action.
- Added the speech bubble graphic as
easy_npc:textures/gui/speech_bubble.pngfor resource packs. - Added a "Chance" condition in percent and a "Relationship" condition for owner and faction.
- Added spawn, owner login, state change, day / night, weather and the missing "On Trade" events.
- Added a base preset per NPC type under
easy_npc:api/preset/base/, usable as a parent preset. - Added the "Wandering Companion" preset, a talkative NPC built from time based messages.
- Added an action registry, an action handler, a preset validator and richer event data for mods.
- Added a tooltip with name, type and distance to every NPC suggestion of the
/easy_npccommands. - Improved the NPC suggestions, which appear without typing and tolerate a near miss of one block.
### 7.5.0
- Fixed #814 by giving every Cobblemon NPC its own animation state instead of one per species.
- Fixed #813 by letting "Move back to Home" work at any distance instead of only near its home.
- Fixed #812 by checking once per session whether a player changed their skin.
- Fixed #810 by accepting Cobblemon aspects of resource packs instead of only "shiny" and "female".
- Fixed the home position of an NPC always reading as unset, which hid "Home" in the configuration
- Fixed NPCs spawned from a preset, the preset browser or a respawn never getting a home position.
- Fixed an NPC spawned from the preset browser keeping the home position of the world the preset was
- Fixed NPCs being drawn as a white silhouette with a shadow in the configuration, skin and preset
- Fixed the server crashing when an NPC with a "Tempt" objective ticked its goals.
- Fixed a single or boss spawner spawning without any limit when its preset carried no stored NPC.
- Fixed the "Legacy Easy NPC Data" warning appearing for newly created NPCs.
- Fixed missing transparency corrections for old 64x32 skins, which showed layer artifacts.
- Fixed the player skin screen freezing for a moment while a player name was looked up.
- Fixed the "Reset look at ..." objective label, which read "Reset loot at ..." in some languages.
- Fixed the "No Gravity" attribute being ignored after a preset import, which let NPCs fall.
- Fixed the Fabric game tests, which crashed on start because of the development helper mods.
- Fixed NPCs losing their owner when they were spawned again after a despawn.
- Fixed objectives being deleted from an NPC when the mod providing them was missing at start.
- Fixed importing a preset without a stored id, which spawned an NPC without owner and home.
- Fixed "Follow owner" and "Look at owner" keeping their old target after the owner was changed.
- Fixed attack targets staying assigned to an NPC after the targeted entity was gone.
- Fixed the "Look at Item" objective, which could be stored but never did anything.
- Fixed walking animation for Doppler NPC and 3rd party models.
- Fixed Forge never running its server start-up step, which left NPC tracking, factions and the
- Fixed Forge development runs starting without any mixins, which disabled the vanilla entity
- Changed the movement objectives to a fixed order: flee, follow, return home, then stroll. NPCs
- Changed inserting a preset into a vanilla monster spawner to keep its delay, count and range.
- Changed "Follow owner" and "Look at owner" without a chosen target to follow the owner of the NPC.
- Changed datapack presets to
easy_npc/preset/, the old folder still works, but only for easy_npc. - Changed the preset browser to always list its entries in the same order.
- Removed the experimental user-defined NPCs; the extra config file is no longer read or created.
- Removed the unused
SERVER_SKINskin type. - Added a new game test structure to support game tests in 1.21.11 and higher.
- Added a reload button to each entry of the player skin screen, to fetch a single skin again.
- Added the reason to the log whenever an NPC is removed, so an unexpected despawn can be traced.
- Added suggestions to
/easy_npc render set species. - Added support for presets from other mods, which no longer have to use the
easy_npcnamespace. - Added a preset visibility that hides a preset from the preset browser and the NPC screens.
- Added a teleport distance and a resting spot offset to the follow objectives.
- Added item tags, a "can be scared" option and a "only without owner" option to "Follow item".
- Added an item field to the look objectives, so an NPC can watch a chosen dropped item.
- Added an identifier per NPC, so a mod can find its own NPCs again.
- Added an option to spawn an NPC again when its owner logs in.
- Added game tests for NeoForge, which had none, and restored the spawn egg, dialog screen, data
- Added game tests for every configuration and editor screen, covering all three mod loaders.
- Added game tests for the home position, covering the spawn default, the stored value and
- Improved the model name parsing, which mistook a species ending in "_shiny" for a variant.
- Improved following of flying NPCs, which now steer directly when there is no path through the air.
- Improved third party support with an API for presets, own objectives and objective configuration.
### 7.4.0
- Fixed #807 by no longer pulling every same-type NPC within 32 blocks into a "Defend Self" fight.
- Fixed #805 by evaluating all visibility settings together instead of stopping at the first one.
- Fixed #804 by keeping the custom name on Doppler NPCs for name based textures and the name tag.
- Fixed #803 by adjusting assets to match typical Minecraft style instead of generic UI style.
- Fixed the day and night detection, which counted sunrise as night and sunset as day.
- Fixed the visibility in the Nether and the End, which used the Overworld time.
- Fixed the time and game mode visibility checkboxes appearing in a random order.
- Fixed game tests only being able to fail on their first assertion, which hid later failures.
- Fixed the "Saddled" horse skin variants, which never showed a saddle.
- Changed "Visible to Owner" and "Visible to Team" to also follow day, night and game mode.
- Changed Evoker, Illusioner and Vindicator variants without "Crossed Arms" to keep their arms down.
- Added a "Defend Faction" objective that attacks whoever hurt a nearby faction member or player.
- Added a system message when faction members fight each other and the faction stays out of it.
- Added a head equipment slot for Illagers so their captain banner can be removed or swapped.
- Added a day and night preview to the display configuration screen.
- Added unit and game tests for the visibility attributes and the faction defense.
- Improved the visibility check performance by reading the display attributes only once per check.
- Improved display attributes from older versions by completing them with their defaults.
- Improved the attack objective screen by disabling "Protect Owner" and "Defend Faction" when unset.
### 7.3.0
- Improved skin variants by carrying their data as typed fields instead of parsing variant names.
- Centralized the Cobblemon mod id and default model on shared constants.
- Reduced duplicated enum code with a shared
EnumUtilshelper forget(String)lookups. - Optimized villager profession and type lookups to use direct registry keys instead of scans.
- Optimized enum name lookups by caching tag names, ids and keys once at construction.
- Added unit and game tests for skin variants, villager resolution and the enum helper.
### 7.1.2
- Fixed #801 by using combination for NPC, Dialog and Action UUIDs to avoid collisions for action
### 7.1.1
- Fixed #800 by lazy loading entity types.
- Fixed #799 by fixing edge cases and adding additional documentation and better log messages.
- Fixed #798 by considering console, commands and command blocks as trusted command sources.
- Fixed a critical single-player / LAN issue where client and server NPCs shared the same registry.
- Fixed a memory leak in the configuration menu handling and added timeout and disconnect cleanup.
- Fixed duplicate downloads when several NPCs request the same skin at the same time.
- Fixed skin lookups failing after a error so a slow server no longer freezes the game.
- Fixed the URL skin screen freezing the game while checking a remote image; the check now runs in
- Added a new World Spawner block that limits an NPC preset across the whole world (all dimensions),
- Hardened remote skin downloads with a strict size limit and safe redirect handling to prevent
blockPrivateAddresses setting.- Improved server performance by only sending entity and player load events to NPCs that actually
### 7.0.0
- Fixed #794 by using the expected type for NPC rendering.
- Fixed scaling screen preview by pinning the entity feet to the 0 line of the scale ruler, so NPCs
box updates.
- Fixed #791 by adding Wandering Trader NPC type.
- Fixed #788 by extending the AI safeguards to Epic Fight and raw NPC variants (Piglin, Villager,
- Fixed #787, #531, #237 and #184 by adding a faction system with
/easy_npc factioncommands,
- Fixed #787, #771 and #572 by adding a new
targetobjectives tab to attack hostile factions or
- Fixed #786 by adding gender and shiny model variants for Cobblemon NPCs, searchable via
female
shiny in the model selection.- Fixed faction combat between invulnerable NPCs by adding the new
Attackable by Factionscombat
- Fixed Cobblemon model selection previews for oversized species by scaling with Cobblemon's own
- Fixed faction management edge cases by validating faction names, sorting faction lists and
- Fixed custom skin reloads by loading and clearing texture caches per skin model instead of always
- Improved the
Attackable by Players/Monsters/Factionscombat attributes to work independently of
Invulnerable, each opening a targeted hole for its own attacker group.- Improved preset command and network handling by splitting the large handlers into smaller focused
- Added Easy Model Entities Support.
- Added faction manager and faction editor screens to create, color and delete factions and manage
FACTION_MANAGEMENT security feature.- Added new
Miscattributes tab as home for the NPC faction assignment. - Added reusable warning and help icon components for inline hints with tooltips.
- Added additional unit and game tests for factions, target objectives and Cobblemon model variants.
### 6.25.0
- Fixed #782, #636, #622 by preserving data components during validations.
- Fixed #780 by caching remote texture downloads and reducing duplicate registrations.
- Fixed #767 by clamping attribute sliders against extreme values from other mods.
- Fixed #754 by adding custom data item matching for NPCs with actions and conditions.
- Fixed texture manager running in the wrong thread may cause crashes and deadlocks in >= 1.21.x.
- Fixed empty UUID handling for action conditions.
- Fixed execution limit reset for actions.
- Added texture registration queue to avoid multiple simultaneous downloads in the same tick.
- Added NPC coin, key and red token as consumable items for NPCs with actions and conditions.
- Added
Welcome Coin Traderas example NPC preset with custom coin, key and red token item data. - Added attribute safeguards against extreme values from other mods.
- Increased fallback max health value from 1024 to 4096 for high-health NPCs.
- Improved texture manager by reducing duplicate texture checks and registrations.
### 6.24.0
- Fixed #459, #775 by adding an option to block interactions with invisible NPCs.
- Fixed #774 startup crash related to optional Epic Fight and Cobblemon entity type maps.
- Fixed #773 by checking timed trade resets during base ticks and before opening trade screens.
- Fixed trade reset timing by increasing internal tickers correctly.
- Added time of day and weather conditions for #459.
- Added additional unit and game tests for trade resets, ticker handling and entity attributes.
- Added
Skywatch Scoutas example NPC preset with time of day and weather conditions.
### 6.23.0
- Fixed #774 by migrating isSunBurnTick error to 26.x.
- Fixed #772 by adjusting texture retries with 403 and 404 errors and lowering logging.
- Fixed #770 item rendering for Epic Fight NPCs (Evoker, Pillager, Vindicator and humanoid skins).
- Fixed #769 door loops with NPCs not reliably opening or closing doors.
- Fixed #760 by adding a dialog option and config setting (buttonConditionMode: LOCK or HIDE) to
- Fixed #709 by adding color picker popup for names with 32 colors and/or a manual RGB/hex value.
- Fixed NPC name color being reset when renaming without a specified color by preserving the
- Improved the door movement attributes so "Pass Door" is automatically enabled while "Open Door"
### 6.22.0
- Fixed #766 by passing the full server player context to command execution for better compatibility
- Fixed #764 by adding entity health, npc health conditions and NPC preset
Grukk, the Sparring Post as example for using these conditions.- Fixed #763 by making sure dialog button execution limits are now recorded.
- Fixed #758 by providing a example NPC preset named
One Wish Companion. - Fixed crashes related to 3rd party villager AI reading non-registered brain memories on Easy NPC
- Fixed Dialog buttons are not locked for server-side data as preparation for #760 and #644.
- Fixed #628 by adding conditional dialog opening support / command for better control over when
- Added brain AI for Piglin and Piglin Brute NPCs and registered the full vanilla brain memory set.
- Added additional guns to the gun tag for #757.
- Added a new "Open Dialog (Conditional)" action that opens a named dialog only if its conditions
- Added new entity health and npc health conditions for actions, dialogs and dialogs buttons.
- Added Piglin, Piglin Brute and Zombified Piglin NPCs invulnerable, for consistency with other
- Added a new "Knockback Immunity" combat attribute that prevents the NPC from being knocked back by
- Added a new "Explosion Immunity" combat attribute that makes the NPC immune to explosion damage
- Moved the "Projectile Collision" attribute to the Combat attribute screen, where it fits better
### 6.21.0
- Fixed item attachment for Illagers in crossed-arms pose.
- Fixed broken illager crossbow attack goal.
- Fixed crashes related to 3rd party items which are not renderable as hand items #756.
- Fixed crashes related to 3rd party mixins trying to access non-existing model parts #756.
- Fixed log.info spam message by reducing log verbosity and adding additional checks for custom
- Improved EasyNPCModelManager performance.
- Refactored NPC renderers to remove default hand item layer.
### 6.20.0
- Fixed crashes related to 3rd mods trying to access non-existing NPCs goals.
### 6.19.0
Note: This update adjusted the dialog background images by 10x6 pixels, which may require users to
adjust their custom dialog backgrounds if they are using custom ones.
- Fixed #752, #130 by adding dialog button condition support to allow to disable buttons.
- Fixed #683, #215 by adding typewriter effect support for dialog text.
- Fixed #690, #309 by allowing conditions for dialog, dialog buttons and interactions.
- Fixed smaller UI issues with dialog screen layout and background.
- Refactored dialog background images by 10x6 pixels on each side.
- Refactored dialog screen layout to better fit the new background size and improve appearance.
- Added typewriter effect and client configuration for dialog text.
- Added condition symbols to indicate the condition status for dialog, buttons and interactions.
- Added amount field for item conditions to allow checking for specific amounts of items.
- Added
Threshold Wardenas example NPC preset with various conditions and actions. - Added smaller bug fixes and optimizations related to dialog conditions and button states.
### 6.18.0
Note: This update changes the internal data format for conditions and actions, which may reset /
remove legacy existing execution-limit entries without stored IDs.
- Fixed #745 by adding conditions for actions to allow more complex and dynamic behavior.
- Fixed #652 by adding dialog button tooltip for longer texts.
- Fixed #687 by adding command value tooltip to show the full value.
- Added Experience Level conditions.
- Added Game-mode conditions.
- Added has item in inventory condition.
- Added has item in hand condition with (main hand and off-hand) support.
- Added player health condition.
- Added player tag condition.
- Added player team condition.
- Added Goldmere example NPC preset with various conditions and actions.
- Added negative condition support to allow negating conditions for more complex logic.
- Removed parameter pseudo IDs for
ActionDataEntryand replaced them with random UUIDs. - Refactored condition system to allow more condition types.
### 6.17.0
- Fixed #738 by adding additional tooltips for "Execute as player"
- Fixed to detailed logs by reducing log.info messages during startup and in-game.
- Added additional unit and game-tests.
### 6.16.0
- Fixed #732 by providing option to disable ESC key and close button for dialogs.
- Fixed #723 by avoid auto-close in specific cases like trading screens.
- Added general dialog configuration options to allow users to customize dialog behavior.
- Added avatar scaling and position offset options for dialogs.
- Added missing translation keys.
### 6.15.1
- Fixed #735 by extending the correct base class.
- Fixed several 26.1.2 specific issues from manual spawn testing.
### 6.15.0 (Trades, Player Heads, Epic Fight and QOL updates)
- Fixed #731 by resyncing species data, if species list is empty on the client.
- Fixed #730 by improving Epic Fight integration and enabled experimental features.
- Fixed #729 by making sure trade uses are stored correctly.
- Fixed #728 by adding custom head support for player heads.
- Fixed #689 by showing remaining trade uses and allow resetting manually and automatically.
- Fixed #218 and #132 with new trade configuration screen and better support for custom trades.
- Fixed trade specific edge by switching between basic and normal/advanced trading mode.
- Fixed dialog button text is truncated with tooltip showing the full text.
- Fixed Cobblemon animation issues by syncing animation state with Cobblemon Animation System.
- Added per trade specific actions to allow users triggering actions after buys.
- Added trade reset button to reset all trades easily.
- Added trade usage information to trade configuration screen.
- Added experimental feature state to allow users to manually enable experimental features.
- Added Griselda Grindstone as example trader with actions.
- Cleanup test files.
### 6.14.0
- Fixed #727 by making sure changes are synced to the client when changing values.
- Fixed #726 by adding additional allow lists for specific commands.
- Fixed #686, #389, #304, #211 by adding basic Cobblemon support with Cobblemon NPC.
- Fixed dialog misalignment and navigation issues by adjusting dialog sprites and screens.
- Fixed x and z root rotation by correcting rotation logic and pivot calculations.
- Added basic Cobblemon support with custom NPC type and model for testing.
### 6.13.0 (Security and Permissions Updates)
Notes: This update includes better security checks and permissions for multiplayer environments. It
allows to execute server commands which can be potentially dangerous if used with malicious intent.
- The update splits the model root data and logic from the rest of the model part data and logic,
- Fixed #725 by separating model root data and logic from the rest of the model part data and logic.
- Fixed #722 by supporting .sbnt files as local presets.
- Fixed #675 by adding dedicated assets for dialog and config screen backgrounds.
- Fixed #605, #532, #529 with new security checks and permissions system.
- Fixed #469, #311 by adding experimental api documentation and examples for custom model support.
- Fixed double rendering of config screen background by removing redundant background rendering.
- Fixed Ghast and Slime hitbox and name tag position issues by adjusting bounding box.
- ⚠️ Added security checks to prevent potential exploits and allow safe usage in multiplayer
- Replaced dynamic dialog screen background with a static one for better performance, customization
- Replaced dynamic config screen background with a static one for better performance.
- Refactored config-ui specific components and removed them from the core mod.
- Removed duplicated sprite sheets.
- Prepare permission system for possible Luck Perms integration in the future like #712.
- General code cleanup and optimizations related to config screen rendering and assets.
### 6.12.0
- Fixed #714 by adding additional checks for custom model part list based on vanilla models.
- Fixed #713 by reducing log verbosity with downgraded per-NPC INFO messages to DEBUG and
- Fixed #711 by reduced oversized startup/config log output.
- Fixed NBT validation guard to prevent unnecessary buffer allocations in production.
- Added model part name constants to EasyNPCModelManager for consistent usage across mixins.
- Improved RenderEntityTypeSupportConfig by enhancing filter logic and optimizing data structures
- Removed verbose debug logs that dump large data structures.
### 6.11.1
- Fixed #710 by improving backward-compatible parsing for recoverable trade data.
### 6.11.0
- Fixed #703 rendering issue with new custom layer system and hand renderings.
- Fixed #701 by adding additional safeguards and logging for invalid trading offers.
- Fixed smart animation not working properly with modified head position.
- Fixed head tracking by moving player detection back to server side-only.
- Fixed CustomLookAtPlayerGoal to better handle edge cases and reduce jitter.
- Fixed issue with Doppler NPCs keeping their hand inventory.
- Improved PoseManager logging message.
- Updated logo with a new design.
### 6.10.0
- Fixed #698 by adding try and catch for 3rd party entity creation.
- Fixed #695 by clearing model part rotations/positions when switching to a
DEFAULTvanilla pose. - Fixed #695 by applying lock rotation and pose animation only when the NPC is idle.
- Fixed #695 by correcting root rotation pivot to use actual bounding box height instead of 0.5f.
- Fixed multiple objective registration issues including inverted
isTargetedPlayercheck, wrong
targets.
- Fixed goal reference being retained after objective is unregistered.
- Removed auto-lock of ROOT rotation when loading poses; root lock is now user-controlled.
- Added lock rotation checkbox to the advanced and custom pose configuration screens.
- Added model-specific pose key filtering in
ConfigurationMenuHandlerfor the default pose screen. - Added unit tests for
CustomPosition,CustomRotation,CustomScale,ModelPose,
ModelAnimationBehavior and ModelAnimationData.- Added
NPCDataIsolationTestHelperand game tests for Fabric and Forge. - Increased max head yaw range from 60° to 65°.
### 6.9.0
- Fixed #692, #666 by adding caching and safeguards to prevent redundant retriggering of NPC entity
- Fixed #651, #617 by adding basic custom poses for all supported NPC types.
- Fixed #597 by adding additional Flee goals for fleeing from players, villagers, monsters, ...
- Fixed pose loading to read directly from mod resources instead of copying files to disk.
- Fixed duplicate
saveNPCcalls on entity join by checking existing registry entry first. - Added
despawnandspawncommands to remove and re-spawn NPCs by UUID with configurable removal
- Added
ModelPoseAPIandEasyNPCEntityHandlerpublic API classes for controlling NPC poses and
- Added pose data files for all supported NPC types.
- Added lock rotation checkbox to the basic pose configuration screen.
- Added
MoveToPositionGoalto move an NPC to a position before executing a callback action. - Added
EasyNPCLookControlandEasyNPCBodyRotationControlto respect locked root rotation. - Added synced owner change and dimension change to the NPC entity data index.
- Added EasyNPCItemAttachmentLayer into various entity renderers.
- Added dedicated
Flee Objectiveconfiguration tab with objectives for fleeing creepers, monsters,
- Added
FOLLOW_ITEMobjective to the follow objectives tab to make NPCs follow item entities by
minecraft:apple).- Added
LookAtEntityByUUIDGoaland enabled the look-at-entity-by-UUID and look-at-owner objectives
- Added
persistentflag toSynchedDataIndexso that transient indices (e.g. crossbow charge,
- Added configurable
customParticlesEnabledflag toSlimeBasefor API consumers. - Added
SoundType.PETand mappedCAT_PURRto the cat NPC for tamed ambient sound variety. - Reduced log verbosity for periodic NPC save operations from INFO to DEBUG.
### 6.8.3
- Fixed #680 by enforcing version miss-match by upgrading network protocol version.
- Fixed #679 by resetting position, rotation and size for name tag.
- Fixed #665 by adding multi state slide for root rotations.
- Fixed #664 by adding option to disable following mouse cursor for easier posing.
- Fixed #663 by improve support for X and Z root rotations.
- Fixed #661 by adding quick rotation with NPC wand and sneaking to the NPC to rotate the root to
- Fixed move tool is wrongly triggering interactions by adding check for move tool in interaction
- Fixed Preset Item is wrongly triggering interactions by adding check for preset item in
- Fixed Slime and Ghast hitbox and name tag position issues by adjusting bounding box and eye height
- Fixed Slime and Ghast GUI position by adjusting offset values.
### 6.8.2
- Fixed #677 by extending
SafeMerchantDatawith notifyTrade to avoid crashes. - Added progression data support for leveling up NPCs based on player interactions and actions.
- Added global NPC tracking system for better management and debugging of NPCs across the world.
- Added
OriginalModelConfig.withVariantTexture()option to allow using variant textures with the
### 6.8.1
- Fixed #676 by using existing preset helper method instead of custom one.
### 6.8.0 (Adding API support)
- Fixed #667 by adding warning messages and additional checks for invalid network packets.
- Fixed Horse spawn eggs model.
- Fixed pose support for allay, chicken, creeper, fox, ghast, horse, illager, iron golem, slime and
- Added NPC base classes for better API support.
- Added NPC raw classes for advanced API support.
- Added Slim and Ghast NPC types.
- Added Custom Model API for easier integration with other mods and custom models.
- Refactored internal data handling and registration for better maintainability and future
### 6.7.1
- Fixed #657 and #656 by adding additional client side checks for vanilla bug.
### 6.7.0
- Fixed #650 by implementing Wolf Leg Animations in setupAnim method.
- Fixed #648 by fixing canBeHitByProjectiles translation.
- Fixed #645 by adding
allowBypassInvulnerabilityconfig option to allow/deny bypassing
- Fixed delete button showing label even with small width.
- Fixed up and down buttons not positioned correctly in some cases.
- Fixed name tag showing up for dialog and configuration UI.
- Fixed distance action issue were multiple actions are not properly triggered.
- Fixed issues with NPC presets.
- Fixed Cat NPC and Wolf NPC owner data not syncing properly.
- Added preset browser for easier selection of common NPC presets.
- Added preset .snbt (text) export and import functionality for sharing NPC presets.
- Refactored existing NPC presets to use new .snbt format.
- Refactored spawner system to use new preset format for better maintainability and future
### 6.6.2
- Fixed #643 by rework scaling system.
- Fixed scaling not properly updating hitbox and nametag position after restart / reload.
- Added MID and MOUSE_OVER name tag visibility modes for finer control over NPC name display.
- Added team-based name tag visibility support respecting vanilla Team.
### 6.6.1
- Fixed #638 by refactored internal data handling for display attributes.
### 6.6.0
- Fixed #634 by implementing asynchronous texture loading with dedicated thread pool.
- Fixed texture loading blocking render thread causing game freezes.
- Fixed race conditions in texture reload protection using atomic operations.
- Fixed resource leaks in HTTP connections during remote texture downloads.
- Fixed URL validation spam allowing multiple simultaneous downloads of the same texture.
- Fixed exception handling for remote image validation preventing crashes on invalid URLs.
- Fixed
defineId called for:warning messages during NPC loading. - Refactored texture loading architecture with multi-level defense and rate limiting.
- Refactored entity data registration logic for better maintainability.
- Converted data classes to modern Java records for better immutability and thread-safety.
- Added thread-safe session server spam protection with ConcurrentHashMap.
- Added comprehensive error recovery with automatic cooldown reset on failures.
- Improved texture loading with 2-thread pool and 500ms rate limiting.
- Improved exception handling with specific catch blocks for IIOException and FileNotFoundException.
### 6.5.2
- Fixed Villager profession and job skin issue.
- Improved GitHub workflows by adding cache for gradle dependencies.
- Improved Gradle build time and cleanup tasks.
### 6.5.1
- Fixed #632 by implementing ON_KILL action type and event.
- Fixed #629 by improving texture handling performance, caching, and memory usage.
- Fixed kill command is not working on NPCs.
- Fixed texture reload protection preventing cache reload after eviction.
- Fixed WebP validation bug in remote image validator (missing return statement).
- Refactored texture handling logic for better maintainability and future improvements.
- Added time-based reload protection (60 seconds) to replace permanent blocking mechanism.
- Added missing variant textures for chicken, pig and wolf.
- Added additional unit tests for texture handling.
- Improved gradle build tasks.
### 6.5.0
- ⚠️ Removed jar-in-jar bundle approach for better mod compatibility and api capabilities.
- Fixed #627 scissor implementation for better compatibility with other mods.
- Fixed #625 lively animation issues when using rotated or moved model parts.
- Fixed default animation are canceled when using scaled model parts.
- Added better pose animation control with smart, default und none options.
### 6.4.1
- Fixed #626 screen switching logic for different NPC UUIDs, thanks to
Spawnbladefor the detailed
### 6.4.0
- Fixed #626 by improving dialog data validation and error handling.
- Fixed #623 by refactoring render data and render handling.
- Fixed #622 by making sure custom data are properly saved and loaded.
- Fixed open dialog action type to allow opening dialogs from other NPCs.
- Fixed hashing issues by adding missing equals and hashCode methods for ConditionDataSet and
- Added custom data test item for #622 and easier testing of custom data.
- Improved records and fixed potential issues with missing data.
### 6.3.0
- Refactored config ui specific components and removed them from the core mod.
- Fixed dialog data by filtering dialog data before sending to the client.
- Fixed dialog editor layout issues and improved usability.
- Fixed missing default values for some dialog data fields.
- Added dialog priority support to control the order of dialog execution.
- Added condition support for dialog and scoreboard actions.
- Added frequency support for dialog to limit how often an dialog can be shown.
- Added new NPC preset to for scoreboard and condition support.
- Improved dialog button data format by removing redundant fields.
### 6.2.0
- Fixed legacy custom name parsing.
- Fixed string injection within dialogs.
- Fixed missing translation for action types.
- Added scoreboard action type to increase, decrease, set scoreboard values.
- Added
@score(...)NPC macro to display scoreboard values in the dialog. - Added additional unit tests.
- Improved spin button with indicators and better usability.
### 6.1.2
- Fixed container and menu sync issues with missing close container packets.
- Fixed close button not working in some cases.
- Fixed jumping mouse cursor between screen transitions.
- Fixed translation files and removed duplicate and deprecated entries.
- Moved Easy NPC wand to existing core item tab instead of creating a new one.
- Added cat pose support for different model parts (except tail).
- Improved EasyNPCWand glowing effect performance by disabling it when not needed.
- Improved custom entity detection by excluding non-living entities like displays, makers, throwns
- Improved cat variant handling.
### 6.1.1
- Fixed #615 by checking if item is equipped in one of the hands.
- Fixed #612 by re-validating entity types.
- Fixed #610 by force sync of hat and head layers for specific models.
- Fixed orc textures.
- Fixed cat variant handling for 1.21.5.
- Fixed player render by adjusting render state
skinfield. - Fixed cat renderer by adjusting render state
texturefield. - Fixed position, scaling and rotation preview.
- Fixed Fairy model.
- Improved custom model support and performance, by moving related logic into to client side only.
- Improved caching of player to UUID mappings for player skins.
- Limited change model commands and logic to Doppler NPCs only.
- Added renderEntityRaw method to render NPC as-it-is.
### 6.1.0 ✨
This is a major release. Please back up your worlds and NPC data before updating. This version
contains many improvements, optimizations, and internal changes that are **not fully compatible**
with earlier releases.
⚠️ Breaking changes
- Existing NPCs and their configuration data from versions before 6.1.0 may not load correctly or
- Internal data formats and some behaviors have been refactored to support new use-cases.
🧩 New modular structure
Easy NPC is now split into three separate mods:
- Easy NPC** – Bundle that includes both Core and Configuration UI for a plug‑and‑play experience.
- Easy NPC: Core** – Lightweight runtime and logic for NPCs, with minimal dependencies. Intended
- Easy NPC: Configuration UI** – Standalone configuration interface for creating and editing NPCs.
🎯 Why this change?
- Allows servers and modpacks to ship only the **Core** mod on the server side for a leaner setup.
- Reduces memory usage and load times when the UI is not required everywhere.
- Makes development and testing faster by separating UI and core logic.
[history]: https://github.com/MarkusBordihn/BOs-Easy-NPC/commits/
[upgrade_guide]: https://github.com/MarkusBordihn/BOs-Easy-NPC/wiki/Upgrading
## Note
This change log includes the summarized changes. For the full changelog, please go to
the [GitHub History][history] instead.
Note: Please always back up your world / NPCs before updating to a new version!
Check the [upgrade guide][upgrade_guide] for more information.
### 7.14.0
- Fixed #846 by keeping custom poses for players who start seeing the NPC later.
- Fixed attribute and trading settings missing for players who start seeing the NPC later.
- Fixed changed max uses, XP and trading type not shown in the trading screens until reload.
- Fixed
/easy_npc sound setchanges not reaching players until the NPC was reloaded. - Added game tests that check NPC poses and settings after respawns and for new players.
### 7.13.0
- Fixed color and formatting tags in dialog button names showing as plain text.
- Fixed the button preview in the editor showing lowercase names as a raw translation key.
- Fixed the "Move EasyNPC" item not working for NPC owners outside of creative mode.
- Fixed
/easy_npc owner setreporting success even when the owner could not be changed. - Fixed the game crashing when the URL or player skin screen showed a skin download error.
- Fixed the preset browser search showing no results after scrolling down the list.
- Changed the network protocol version, so client and server must run the same mod version.
- Added
@initiator,@npcand@score()support to dialog button names to fix #841. - Added automatic client tests with the Client Runtime Interface Toolkit.
- Larger core refactoring and code cleanup.
### 7.12.2
- Fixed the Fairy hitbox being far too small, so its name tag and speech bubble sat in its body.
- Fixed scaled NPCs keeping their old hitbox and eye level, so hits, clicks and looking missed.
- Fixed oversized names, lists and NPC data in network packets being read without any limit.
- Fixed invalid NPC positions, scales, attributes, names and durations from being applied.
- Changed Fairy NPCs to take up the space of their model, so they collide and can be clicked.
- Changed Skeleton, Stray and Bogged NPCs to the vanilla hitbox height, they were slightly short.
- Changed the network protocol version, so client and server must run the same mod version.
### 7.12.1
- Fixed #836 by always showing "Restore", including datapack presets, with a reason tooltip.
- Fixed preset import and export messages missing, wrong or not warning about replaced NPCs.
- Fixed the preset browser reloading on each keystroke, leaking NPCs and clearing the selection.
- Fixed selection box drop-down lists being covered by the checkboxes and labels behind them.
- Fixed the preset list sorting, filter order and layout clipping options in small windows.
- Fixed
/easy_npc preset import datawithout a position importing it as a default preset. - Fixed spawn rate limit leaks, unstable preset IDs and "Spawn New" stacking NPCs on one spot.
- Changed "Restore" to refuse instead of spawning a copy when it is not permitted.
- Added sorting, a match count, reload, auto-close, the NPC ID and tooltips for presets and skins.
- Added
matching <pattern>batch imports with limits, a confirmation and a clickable position.
### 7.12.0
- Fixed #833 by showing Easy NPC Wand outlines only to the wand holder, owner and admins.
- Fixed #834 by adding "Set Home Here" and "Reset Home" buttons to the position configuration.
- Fixed #835 by keeping the NPC ID and position in exported presets, so imports restore the same
- Fixed preset imports and spawn eggs losing the owner's list entry and owner objectives.
- Fixed NPCs restored from an automatic backup losing their owner and becoming ownerless.
- Fixed selection lists showing only their first six entries and hiding the rest.
- Changed importing a preset to update the original NPC at its stored position instead of adding a
- Changed completed trades to play the "Trade completed" sound, which stayed silent before.
- Changed the API dialog call to report an unknown dialog label instead of always reporting success.
- Changed NPCs without arms to carry held items at the head or body instead of hiding them.
- Changed the optional Easy Model Entities dependency to require version 2.4.0 or newer.
- Added a "Sound" configuration with sounds for dialogs, speech, swimming, eating and fall damage.
- Added a searchable sound selection with volume and pitch sliders to the "Sound" configuration.
- Added a "Block Vehicles" option to keep NPCs out of boats, minecarts and modded chairs.
- Added the profession selection to all skin configurations and a new built-in skin per NPC type.
- Added client settings to hide name tags behind walls and
highlightEnabledfor wand outlines. - Added an "Exists" condition operation and API access to NPC movement, actions and presets.
### 7.11.0
- Fixed #828 by no longer freezing the server on logout when NPCs follow or watch the player.
- Fixed #831 by moving routine NPC removal messages to the debug log.
- Fixed #832 by making humanoid NPCs ignore custom player models, animations and poses.
- Fixed hourly NPC backups stuttering on large worlds and retaining timestamps of removed NPCs.
- Fixed hourly NPC backups losing the identity, owner and position of the backed-up NPC.
- Fixed owner-login restoration duplicating, repeatedly restoring, reviving or moving unloaded NPCs.
- Fixed NPC index and file synchronization issues causing lost NPCs, crashes or false warnings.
- Fixed stale NPC data after unloading, avoided redundant writes and added repeated-unload warnings.
- Fixed the preset browser failing to list custom and world presets saved in the SNBT format.
- Fixed speech bubbles losing their text and turning translucent with Iris shaders.
- Fixed the "Opacity" of an NPC being ignored while a shader pack is active.
- Fixed text formatting and macro parsing for translated speech bubbles and mod API texts.
- Fixed speech bubbles and their text staying hidden behind blocks while a shader pack is active.
- Added
minLightLevelto keep speech bubbles readable in dark surroundings.
### 7.10.0
- Fixed #829 by allowing bats and other non-walking mobs as the render entity of a Doppler NPC.
- Fixed the Wandering Trader NPC rendering without its texture.
- Fixed NPCs rendered as a bat, frog or warden showing a static pose instead of their animation.
- Fixed the NPC name tag showing above the previews in the "Custom Models" configuration.
- Fixed speech bubbles being cut off by walls, doorframes and the NPC's own body.
- Fixed the previews in the "Custom Models" configuration.
- Changed the previews in the "Custom Models" configuration to stand on a common ground line.
- Changed overlapping speech bubbles to move apart and to stay visible when the NPC is off-screen.
- Changed "Navigation: Automatic" to use flying movement for NPCs rendered as a flying mob.
- Changed the render entity list to hide seats, paintings, thrown items and other non-mob entities.
- Added a "Min. hover height" slider for flying NPCs and client settings for speech bubbles.
### 7.9.0
- Fixed modded fish NPCs, like the ones of Tide 2, spinning around instead of swimming upright.
- Fixed "Navigation: Automatic" using ground movement for water NPCs and aquatic model NPCs.
- Fixed the "Random Swimming" objective never moving an NPC that uses aquatic navigation.
- Fixed a swimming NPC shaking or twitching in place instead of holding its tilt and swim depth.
- Fixed a swimming NPC turning in circles forever when it could not reach its next path point.
- Fixed an NPC that fell into water never getting out of it again.
- Fixed a following NPC searching a new path every tick while its target was unreachable.
- Fixed the "Move to" actions stopping short of a raised target or not starting while in the air.
- Fixed "Move back to Home" ignoring height differences and never returning from beyond 32 blocks.
- Fixed the "Opacity" input field being too narrow to show a value of 100.
- Fixed a damaged NPC with an Easy Model Entities model never flashing red.
- Changed modded water NPCs to swim level, vanilla water mobs keep their tilt as before.
- Changed the "Move to" actions to walk up to 48 blocks and to teleport only beyond that range.
- Changed "Move to" and "Move back to Home" to give up after three seconds without progress.
- Changed the timeout of a "Move to" action to count real ticks, it ran twice as long before.
- Changed a new "Random Swimming" objective to rank below following, fleeing and attack goals.
- Changed "Opacity" of an NPC with an Easy Model Entities model to be applied by that mod itself.
- Changed the minimum Easy Model Entities version to 2.3.0, older versions disable the integration.
- Added "Depth below surface" and "Height above floor" sliders for the swim level of an NPC.
- Added log entries for the NPC files written on a world save, with a warning above 250 ms each.
### 7.8.1
- Fixed #827 by rendering fish NPCs in water upright instead of always flopping on their side.
- Fixed #828 by keeping a damaged NPC from blocking the world save, it now falls back to defaults.
- Fixed a restored NPC picking up a random preset ID that changed with every save.
- Changed NPC data to only be written to disk when it actually changed.
### 7.8.0
- Fixed smaller text and UI issues.
- Changed an NPC that is already standing at its target position to finish the movement right away.
- Changed the "None" skin tab to "Advanced", which now holds "Disable Skin" and the texture field.
- Changed the minimum Easy Model Entities version to 2.2.0, older versions are no longer accepted.
- Added a "Move to" action, which sends an NPC to a position, a player, its owner or its home.
- Added a "Move to and Wait" action, which runs the following actions only after the arrival.
- Added an arrival radius, a timeout and an optional teleport to both move actions.
- Added an "Opacity" attribute from 0 to 100, which fades body, armor and hand items together.
- Added a "Set Opacity" action, which turns an NPC into a ghost or hides it completely.
- Added the "Lantern Wraith" preset, a ghost walking a square with a short line at every corner.
- Added API access to the move actions and the opacity of an NPC.
- Added a "Resource Location" skin type, which renders any texture of a mod or a resource pack.
- Added an "Advanced" skin tab, which previews the NPC with the entered texture before applying it.
### 7.7.7
- Fixed #821 by keeping the transparency of 64x64 skins, which Fresh Moves needs for its eyes. Skins
- Fixed #818 by running trade actions for Villager and Wandering Trader NPCs as well.
- Fixed a dialog with several text variants switching its speech bubble size every second.
- Fixed the skin cache storing the processed image instead of the original download.
- Fixed the untranslated interval names, like
PER_DAY, of the "Execution Limit" condition. - Fixed the
sitanimation of Easy Model NPCs, which never used the built-in sitting pose. - Fixed the speech bubble being cut off by the head of an NPC when a player stood close to it.
- Changed speech bubbles to keep their screen size and to move down or aside when a player is close.
- Changed the speech bubble text to render 20% larger than a name tag.
- Changed a time based action set with a "Wait" action to run in order instead of picking one entry.
- Changed dialog texts to wrap later, so an existing dialog can switch to the wider screen layout.
- Changed fallback actions to skip screen actions without a player, like the regular actions do.
- Changed the minimum Easy Model Entities version to 2.1.0, older versions disable the integration.
- Added a "Wait" action, which pauses the following actions of an event for a chosen duration.
- Added the "Countdown Timekeeper" preset, a speech bubble count to ten ending in sound and sparks.
- Added scaling and rotation for Doppler NPCs behind the "Experimental Features" checkbox. Both only
- Added a "Sound" action, which plays a sound at the NPC with sound category, volume and pitch.
- Added "Every 5 Minutes" and "Every 15 Minutes" to the "Execution Limit" condition.
- Added a "Player Idle" condition, which checks how long a player has not moved.
- Added an "Immovable" attribute, which keeps an NPC in place against pushing and knockback.
- Added
/easy_npc pauseto pause a single NPC or all NPCs; the global pause ends with the server. - Added API access to the sound action, the pause state and the idle time of a player.
- Added a texture override per model slot for Easy Model NPCs over
/easy_npc render texture. - Added a "Repeat" playback mode with a count and a time limit to the "Play Animation" action.
- Added API access to animation variants, texture slots and textures of Easy Model NPCs.
### 7.6.0
- Fixed unclear mod conflict errors for duplicate entity data tracker IDs.
- Fixed third-party health bars rendering over NPC previews in configuration and dialog screens.
- Fixed Doppler and Easy Model Entities NPCs using default hitboxes instead of their model size.
- Fixed the
/easy_npccommands suggesting no NPC UUIDs at all on a server. - Fixed the pose list of the "Set Pose" action drawing over its input field.
- Fixed the untranslated "Loop", "After current" and "Action Data Type" labels of the action editor.
- Fixed the missing hint text of the "Chance" condition.
- Fixed long condition hints running out of the editor screen instead of wrapping.
- Fixed the misaligned help icons and text buttons of the "Message" action.
- Fixed changes to the "Set Pose", "Play Animation" and "Stop Animation" actions not being saveable.
- Fixed the speech bubble text sitting closer to its upper border than to its lower one.
- Changed the NPC suggestions to list the crosshair NPC first and only own NPCs without permissions.
- Changed a preset export to only store what differs from a new NPC, without position or owner.
- Changed a preset without objectives or actions to fall back to the defaults of its NPC type.
- Changed events without a player, like "On Spawn" or "On Kill", to check their conditions. An
- Changed a time based action to pick the owner as
@initiatorwhenever the owner is nearby. - Changed speech bubbles to stay visible from 5 up to 18 seconds, depending on the text length.
- Changed the "Set Pose" action to only show its input field for the "custom" pose entry.
- Added time based actions on five fixed steps, from every ~1 second up to every ~15 minutes.
- Added a "Message" action for chat, system message and speech bubble text without a command.
- Added text variants, a sender name, a recipient and translation keys to the "Message" action.
- Added the speech bubble graphic as
easy_npc:textures/gui/speech_bubble.pngfor resource packs. - Added a "Chance" condition in percent and a "Relationship" condition for owner and faction.
- Added spawn, owner login, state change, day / night, weather and the missing "On Trade" events.
- Added a base preset per NPC type under
easy_npc:api/preset/base/, usable as a parent preset. - Added the "Wandering Companion" preset, a talkative NPC built from time based messages.
- Added an action registry, an action handler, a preset validator and richer event data for mods.
- Added a tooltip with name, type and distance to every NPC suggestion of the
/easy_npccommands. - Improved the NPC suggestions, which appear without typing and tolerate a near miss of one block.
### 7.5.0
- Fixed #814 by giving every Cobblemon NPC its own animation state instead of one per species.
- Fixed #813 by letting "Move back to Home" work at any distance instead of only near its home.
- Fixed #812 by checking once per session whether a player changed their skin.
- Fixed #810 by accepting Cobblemon aspects of resource packs instead of only "shiny" and "female".
- Fixed the home position of an NPC always reading as unset, which hid "Home" in the configuration
- Fixed NPCs spawned from a preset, the preset browser or a respawn never getting a home position.
- Fixed an NPC spawned from the preset browser keeping the home position of the world the preset was
- Fixed NPCs being drawn as a white silhouette with a shadow in the configuration, skin and preset
- Fixed the server crashing when an NPC with a "Tempt" objective ticked its goals.
- Fixed a single or boss spawner spawning without any limit when its preset carried no stored NPC.
- Fixed the "Legacy Easy NPC Data" warning appearing for newly created NPCs.
- Fixed missing transparency corrections for old 64x32 skins, which showed layer artifacts.
- Fixed the player skin screen freezing for a moment while a player name was looked up.
- Fixed the "Reset look at ..." objective label, which read "Reset loot at ..." in some languages.
- Fixed the "No Gravity" attribute being ignored after a preset import, which let NPCs fall.
- Fixed the Fabric game tests, which crashed on start because of the development helper mods.
- Fixed NPCs losing their owner when they were spawned again after a despawn.
- Fixed objectives being deleted from an NPC when the mod providing them was missing at start.
- Fixed importing a preset without a stored id, which spawned an NPC without owner and home.
- Fixed "Follow owner" and "Look at owner" keeping their old target after the owner was changed.
- Fixed attack targets staying assigned to an NPC after the targeted entity was gone.
- Fixed the "Look at Item" objective, which could be stored but never did anything.
- Fixed walking animation for Doppler NPC and 3rd party models.
- Fixed Forge never running its server start-up step, which left NPC tracking, factions and the
- Fixed Forge development runs starting without any mixins, which disabled the vanilla entity
- Changed the movement objectives to a fixed order: flee, follow, return home, then stroll. NPCs
- Changed inserting a preset into a vanilla monster spawner to keep its delay, count and range.
- Changed "Follow owner" and "Look at owner" without a chosen target to follow the owner of the NPC.
- Changed datapack presets to
easy_npc/preset/, the old folder still works, but only for easy_npc. - Changed the preset browser to always list its entries in the same order.
- Removed the experimental user-defined NPCs; the extra config file is no longer read or created.
- Removed the unused
SERVER_SKINskin type. - Added a new game test structure to support game tests in 1.21.11 and higher.
- Added a reload button to each entry of the player skin screen, to fetch a single skin again.
- Added the reason to the log whenever an NPC is removed, so an unexpected despawn can be traced.
- Added suggestions to
/easy_npc render set species. - Added support for presets from other mods, which no longer have to use the
easy_npcnamespace. - Added a preset visibility that hides a preset from the preset browser and the NPC screens.
- Added a teleport distance and a resting spot offset to the follow objectives.
- Added item tags, a "can be scared" option and a "only without owner" option to "Follow item".
- Added an item field to the look objectives, so an NPC can watch a chosen dropped item.
- Added an identifier per NPC, so a mod can find its own NPCs again.
- Added an option to spawn an NPC again when its owner logs in.
- Added game tests for NeoForge, which had none, and restored the spawn egg, dialog screen, data
- Added game tests for every configuration and editor screen, covering all three mod loaders.
- Added game tests for the home position, covering the spawn default, the stored value and
- Improved the model name parsing, which mistook a species ending in "_shiny" for a variant.
- Improved following of flying NPCs, which now steer directly when there is no path through the air.
- Improved third party support with an API for presets, own objectives and objective configuration.
### 7.4.0
- Fixed #807 by no longer pulling every same-type NPC within 32 blocks into a "Defend Self" fight.
- Fixed #805 by evaluating all visibility settings together instead of stopping at the first one.
- Fixed #804 by keeping the custom name on Doppler NPCs for name based textures and the name tag.
- Fixed #803 by adjusting assets to match typical Minecraft style instead of generic UI style.
- Fixed the day and night detection, which counted sunrise as night and sunset as day.
- Fixed the visibility in the Nether and the End, which used the Overworld time.
- Fixed the time and game mode visibility checkboxes appearing in a random order.
- Fixed game tests only being able to fail on their first assertion, which hid later failures.
- Fixed the "Saddled" horse skin variants, which never showed a saddle.
- Changed "Visible to Owner" and "Visible to Team" to also follow day, night and game mode.
- Changed Evoker, Illusioner and Vindicator variants without "Crossed Arms" to keep their arms down.
- Added a "Defend Faction" objective that attacks whoever hurt a nearby faction member or player.
- Added a system message when faction members fight each other and the faction stays out of it.
- Added a head equipment slot for Illagers so their captain banner can be removed or swapped.
- Added a day and night preview to the display configuration screen.
- Added unit and game tests for the visibility attributes and the faction defense.
- Improved the visibility check performance by reading the display attributes only once per check.
- Improved display attributes from older versions by completing them with their defaults.
- Improved the attack objective screen by disabling "Protect Owner" and "Defend Faction" when unset.
### 7.3.0
- Improved skin variants by carrying their data as typed fields instead of parsing variant names.
- Centralized the Cobblemon mod id and default model on shared constants.
- Reduced duplicated enum code with a shared
EnumUtilshelper forget(String)lookups. - Optimized villager profession and type lookups to use direct registry keys instead of scans.
- Optimized enum name lookups by caching tag names, ids and keys once at construction.
- Added unit and game tests for skin variants, villager resolution and the enum helper.
### 7.1.2
- Fixed #801 by using combination for NPC, Dialog and Action UUIDs to avoid collisions for action
### 7.1.1
- Fixed #800 by lazy loading entity types.
- Fixed #799 by fixing edge cases and adding additional documentation and better log messages.
- Fixed #798 by considering console, commands and command blocks as trusted command sources.
- Fixed a critical single-player / LAN issue where client and server NPCs shared the same registry.
- Fixed a memory leak in the configuration menu handling and added timeout and disconnect cleanup.
- Fixed duplicate downloads when several NPCs request the same skin at the same time.
- Fixed skin lookups failing after a error so a slow server no longer freezes the game.
- Fixed the URL skin screen freezing the game while checking a remote image; the check now runs in
- Added a new World Spawner block that limits an NPC preset across the whole world (all dimensions),
- Hardened remote skin downloads with a strict size limit and safe redirect handling to prevent
blockPrivateAddresses setting.- Improved server performance by only sending entity and player load events to NPCs that actually
### 7.0.0
- Fixed #794 by using the expected type for NPC rendering.
- Fixed scaling screen preview by pinning the entity feet to the 0 line of the scale ruler, so NPCs
box updates.
- Fixed #791 by adding Wandering Trader NPC type.
- Fixed #788 by extending the AI safeguards to Epic Fight and raw NPC variants (Piglin, Villager,
- Fixed #787, #531, #237 and #184 by adding a faction system with
/easy_npc factioncommands,
- Fixed #787, #771 and #572 by adding a new
targetobjectives tab to attack hostile factions or
- Fixed #786 by adding gender and shiny model variants for Cobblemon NPCs, searchable via
female
shiny in the model selection.- Fixed faction combat between invulnerable NPCs by adding the new
Attackable by Factionscombat
- Fixed Cobblemon model selection previews for oversized species by scaling with Cobblemon's own
- Fixed faction management edge cases by validating faction names, sorting faction lists and
- Fixed custom skin reloads by loading and clearing texture caches per skin model instead of always
- Improved the
Attackable by Players/Monsters/Factionscombat attributes to work independently of
Invulnerable, each opening a targeted hole for its own attacker group.- Improved preset command and network handling by splitting the large handlers into smaller focused
- Added Easy Model Entities Support.
- Added faction manager and faction editor screens to create, color and delete factions and manage
FACTION_MANAGEMENT security feature.- Added new
Miscattributes tab as home for the NPC faction assignment. - Added reusable warning and help icon components for inline hints with tooltips.
- Added additional unit and game tests for factions, target objectives and Cobblemon model variants.
### 6.25.0
- Fixed #782, #636, #622 by preserving data components during validations.
- Fixed #780 by caching remote texture downloads and reducing duplicate registrations.
- Fixed #767 by clamping attribute sliders against extreme values from other mods.
- Fixed #754 by adding custom data item matching for NPCs with actions and conditions.
- Fixed texture manager running in the wrong thread may cause crashes and deadlocks in >= 1.21.x.
- Fixed empty UUID handling for action conditions.
- Fixed execution limit reset for actions.
- Added texture registration queue to avoid multiple simultaneous downloads in the same tick.
- Added NPC coin, key and red token as consumable items for NPCs with actions and conditions.
- Added
Welcome Coin Traderas example NPC preset with custom coin, key and red token item data. - Added attribute safeguards against extreme values from other mods.
- Increased fallback max health value from 1024 to 4096 for high-health NPCs.
- Improved texture manager by reducing duplicate texture checks and registrations.
### 6.24.0
- Fixed #459, #775 by adding an option to block interactions with invisible NPCs.
- Fixed #774 startup crash related to optional Epic Fight and Cobblemon entity type maps.
- Fixed #773 by checking timed trade resets during base ticks and before opening trade screens.
- Fixed trade reset timing by increasing internal tickers correctly.
- Added time of day and weather conditions for #459.
- Added additional unit and game tests for trade resets, ticker handling and entity attributes.
- Added
Skywatch Scoutas example NPC preset with time of day and weather conditions.
### 6.23.0
- Fixed #774 by migrating isSunBurnTick error to 26.x.
- Fixed #772 by adjusting texture retries with 403 and 404 errors and lowering logging.
- Fixed #770 item rendering for Epic Fight NPCs (Evoker, Pillager, Vindicator and humanoid skins).
- Fixed #769 door loops with NPCs not reliably opening or closing doors.
- Fixed #760 by adding a dialog option and config setting (buttonConditionMode: LOCK or HIDE) to
- Fixed #709 by adding color picker popup for names with 32 colors and/or a manual RGB/hex value.
- Fixed NPC name color being reset when renaming without a specified color by preserving the
- Improved the door movement attributes so "Pass Door" is automatically enabled while "Open Door"
### 6.22.0
- Fixed #766 by passing the full server player context to command execution for better compatibility
- Fixed #764 by adding entity health, npc health conditions and NPC preset
Grukk, the Sparring Post as example for using these conditions.- Fixed #763 by making sure dialog button execution limits are now recorded.
- Fixed #758 by providing a example NPC preset named
One Wish Companion. - Fixed crashes related to 3rd party villager AI reading non-registered brain memories on Easy NPC
- Fixed Dialog buttons are not locked for server-side data as preparation for #760 and #644.
- Fixed #628 by adding conditional dialog opening support / command for better control over when
- Added brain AI for Piglin and Piglin Brute NPCs and registered the full vanilla brain memory set.
- Added additional guns to the gun tag for #757.
- Added a new "Open Dialog (Conditional)" action that opens a named dialog only if its conditions
- Added new entity health and npc health conditions for actions, dialogs and dialogs buttons.
- Added Piglin, Piglin Brute and Zombified Piglin NPCs invulnerable, for consistency with other
- Added a new "Knockback Immunity" combat attribute that prevents the NPC from being knocked back by
- Added a new "Explosion Immunity" combat attribute that makes the NPC immune to explosion damage
- Moved the "Projectile Collision" attribute to the Combat attribute screen, where it fits better
### 6.21.0
- Fixed item attachment for Illagers in crossed-arms pose.
- Fixed broken illager crossbow attack goal.
- Fixed crashes related to 3rd party items which are not renderable as hand items #756.
- Fixed crashes related to 3rd party mixins trying to access non-existing model parts #756.
- Fixed log.info spam message by reducing log verbosity and adding additional checks for custom
- Improved EasyNPCModelManager performance.
- Refactored NPC renderers to remove default hand item layer.
### 6.20.0
- Fixed crashes related to 3rd mods trying to access non-existing NPCs goals.
### 6.19.0
Note: This update adjusted the dialog background images by 10x6 pixels, which may require users to
adjust their custom dialog backgrounds if they are using custom ones.
- Fixed #752, #130 by adding dialog button condition support to allow to disable buttons.
- Fixed #683, #215 by adding typewriter effect support for dialog text.
- Fixed #690, #309 by allowing conditions for dialog, dialog buttons and interactions.
- Fixed smaller UI issues with dialog screen layout and background.
- Refactored dialog background images by 10x6 pixels on each side.
- Refactored dialog screen layout to better fit the new background size and improve appearance.
- Added typewriter effect and client configuration for dialog text.
- Added condition symbols to indicate the condition status for dialog, buttons and interactions.
- Added amount field for item conditions to allow checking for specific amounts of items.
- Added
Threshold Wardenas example NPC preset with various conditions and actions. - Added smaller bug fixes and optimizations related to dialog conditions and button states.
### 6.18.0
Note: This update changes the internal data format for conditions and actions, which may reset /
remove legacy existing execution-limit entries without stored IDs.
- Fixed #745 by adding conditions for actions to allow more complex and dynamic behavior.
- Fixed #652 by adding dialog button tooltip for longer texts.
- Fixed #687 by adding command value tooltip to show the full value.
- Added Experience Level conditions.
- Added Game-mode conditions.
- Added has item in inventory condition.
- Added has item in hand condition with (main hand and off-hand) support.
- Added player health condition.
- Added player tag condition.
- Added player team condition.
- Added Goldmere example NPC preset with various conditions and actions.
- Added negative condition support to allow negating conditions for more complex logic.
- Removed parameter pseudo IDs for
ActionDataEntryand replaced them with random UUIDs. - Refactored condition system to allow more condition types.
### 6.17.0
- Fixed #738 by adding additional tooltips for "Execute as player"
- Fixed to detailed logs by reducing log.info messages during startup and in-game.
- Added additional unit and game-tests.
### 6.16.0
- Fixed #732 by providing option to disable ESC key and close button for dialogs.
- Fixed #723 by avoid auto-close in specific cases like trading screens.
- Added general dialog configuration options to allow users to customize dialog behavior.
- Added avatar scaling and position offset options for dialogs.
- Added missing translation keys.
### 6.15.1
- Fixed #735 by extending the correct base class.
- Fixed several 26.1.2 specific issues from manual spawn testing.
### 6.15.0 (Trades, Player Heads, Epic Fight and QOL updates)
- Fixed #731 by resyncing species data, if species list is empty on the client.
- Fixed #730 by improving Epic Fight integration and enabled experimental features.
- Fixed #729 by making sure trade uses are stored correctly.
- Fixed #728 by adding custom head support for player heads.
- Fixed #689 by showing remaining trade uses and allow resetting manually and automatically.
- Fixed #218 and #132 with new trade configuration screen and better support for custom trades.
- Fixed trade specific edge by switching between basic and normal/advanced trading mode.
- Fixed dialog button text is truncated with tooltip showing the full text.
- Fixed Cobblemon animation issues by syncing animation state with Cobblemon Animation System.
- Added per trade specific actions to allow users triggering actions after buys.
- Added trade reset button to reset all trades easily.
- Added trade usage information to trade configuration screen.
- Added experimental feature state to allow users to manually enable experimental features.
- Added Griselda Grindstone as example trader with actions.
- Cleanup test files.
### 6.14.0
- Fixed #727 by making sure changes are synced to the client when changing values.
- Fixed #726 by adding additional allow lists for specific commands.
- Fixed #686, #389, #304, #211 by adding basic Cobblemon support with Cobblemon NPC.
- Fixed dialog misalignment and navigation issues by adjusting dialog sprites and screens.
- Fixed x and z root rotation by correcting rotation logic and pivot calculations.
- Added basic Cobblemon support with custom NPC type and model for testing.
### 6.13.0 (Security and Permissions Updates)
Notes: This update includes better security checks and permissions for multiplayer environments. It
allows to execute server commands which can be potentially dangerous if used with malicious intent.
- The update splits the model root data and logic from the rest of the model part data and logic,
- Fixed #725 by separating model root data and logic from the rest of the model part data and logic.
- Fixed #722 by supporting .sbnt files as local presets.
- Fixed #675 by adding dedicated assets for dialog and config screen backgrounds.
- Fixed #605, #532, #529 with new security checks and permissions system.
- Fixed #469, #311 by adding experimental api documentation and examples for custom model support.
- Fixed double rendering of config screen background by removing redundant background rendering.
- Fixed Ghast and Slime hitbox and name tag position issues by adjusting bounding box.
- ⚠️ Added security checks to prevent potential exploits and allow safe usage in multiplayer
- Replaced dynamic dialog screen background with a static one for better performance, customization
- Replaced dynamic config screen background with a static one for better performance.
- Refactored config-ui specific components and removed them from the core mod.
- Removed duplicated sprite sheets.
- Prepare permission system for possible Luck Perms integration in the future like #712.
- General code cleanup and optimizations related to config screen rendering and assets.
### 6.12.0
- Fixed #714 by adding additional checks for custom model part list based on vanilla models.
- Fixed #713 by reducing log verbosity with downgraded per-NPC INFO messages to DEBUG and
- Fixed #711 by reduced oversized startup/config log output.
- Fixed NBT validation guard to prevent unnecessary buffer allocations in production.
- Added model part name constants to EasyNPCModelManager for consistent usage across mixins.
- Improved RenderEntityTypeSupportConfig by enhancing filter logic and optimizing data structures
- Removed verbose debug logs that dump large data structures.
### 6.11.1
- Fixed #710 by improving backward-compatible parsing for recoverable trade data.
### 6.11.0
- Fixed #703 rendering issue with new custom layer system and hand renderings.
- Fixed #701 by adding additional safeguards and logging for invalid trading offers.
- Fixed smart animation not working properly with modified head position.
- Fixed head tracking by moving player detection back to server side-only.
- Fixed CustomLookAtPlayerGoal to better handle edge cases and reduce jitter.
- Fixed issue with Doppler NPCs keeping their hand inventory.
- Improved PoseManager logging message.
- Updated logo with a new design.
### 6.10.0
- Fixed #698 by adding try and catch for 3rd party entity creation.
- Fixed #695 by clearing model part rotations/positions when switching to a
DEFAULTvanilla pose. - Fixed #695 by applying lock rotation and pose animation only when the NPC is idle.
- Fixed #695 by correcting root rotation pivot to use actual bounding box height instead of 0.5f.
- Fixed multiple objective registration issues including inverted
isTargetedPlayercheck, wrong
targets.
- Fixed goal reference being retained after objective is unregistered.
- Removed auto-lock of ROOT rotation when loading poses; root lock is now user-controlled.
- Added lock rotation checkbox to the advanced and custom pose configuration screens.
- Added model-specific pose key filtering in
ConfigurationMenuHandlerfor the default pose screen. - Added unit tests for
CustomPosition,CustomRotation,CustomScale,ModelPose,
ModelAnimationBehavior and ModelAnimationData.- Added
NPCDataIsolationTestHelperand game tests for Fabric and Forge. - Increased max head yaw range from 60° to 65°.
### 6.9.0
- Fixed #692, #666 by adding caching and safeguards to prevent redundant retriggering of NPC entity
- Fixed #651, #617 by adding basic custom poses for all supported NPC types.
- Fixed #597 by adding additional Flee goals for fleeing from players, villagers, monsters, ...
- Fixed pose loading to read directly from mod resources instead of copying files to disk.
- Fixed duplicate
saveNPCcalls on entity join by checking existing registry entry first. - Added
despawnandspawncommands to remove and re-spawn NPCs by UUID with configurable removal
- Added
ModelPoseAPIandEasyNPCEntityHandlerpublic API classes for controlling NPC poses and
- Added pose data files for all supported NPC types.
- Added lock rotation checkbox to the basic pose configuration screen.
- Added
MoveToPositionGoalto move an NPC to a position before executing a callback action. - Added
EasyNPCLookControlandEasyNPCBodyRotationControlto respect locked root rotation. - Added synced owner change and dimension change to the NPC entity data index.
- Added EasyNPCItemAttachmentLayer into various entity renderers.
- Added dedicated
Flee Objectiveconfiguration tab with objectives for fleeing creepers, monsters,
- Added
FOLLOW_ITEMobjective to the follow objectives tab to make NPCs follow item entities by
minecraft:apple).- Added
LookAtEntityByUUIDGoaland enabled the look-at-entity-by-UUID and look-at-owner objectives
- Added
persistentflag toSynchedDataIndexso that transient indices (e.g. crossbow charge,
- Added configurable
customParticlesEnabledflag toSlimeBasefor API consumers. - Added
SoundType.PETand mappedCAT_PURRto the cat NPC for tamed ambient sound variety. - Reduced log verbosity for periodic NPC save operations from INFO to DEBUG.
### 6.8.3
- Fixed #680 by enforcing version miss-match by upgrading network protocol version.
- Fixed #679 by resetting position, rotation and size for name tag.
- Fixed #665 by adding multi state slide for root rotations.
- Fixed #664 by adding option to disable following mouse cursor for easier posing.
- Fixed #663 by improve support for X and Z root rotations.
- Fixed #661 by adding quick rotation with NPC wand and sneaking to the NPC to rotate the root to
- Fixed move tool is wrongly triggering interactions by adding check for move tool in interaction
- Fixed Preset Item is wrongly triggering interactions by adding check for preset item in
- Fixed Slime and Ghast hitbox and name tag position issues by adjusting bounding box and eye height
- Fixed Slime and Ghast GUI position by adjusting offset values.
### 6.8.2
- Fixed #677 by extending
SafeMerchantDatawith notifyTrade to avoid crashes. - Added progression data support for leveling up NPCs based on player interactions and actions.
- Added global NPC tracking system for better management and debugging of NPCs across the world.
- Added
OriginalModelConfig.withVariantTexture()option to allow using variant textures with the
### 6.8.1
- Fixed #676 by using existing preset helper method instead of custom one.
### 6.8.0 (Adding API support)
- Fixed #667 by adding warning messages and additional checks for invalid network packets.
- Fixed Horse spawn eggs model.
- Fixed pose support for allay, chicken, creeper, fox, ghast, horse, illager, iron golem, slime and
- Added NPC base classes for better API support.
- Added NPC raw classes for advanced API support.
- Added Slim and Ghast NPC types.
- Added Custom Model API for easier integration with other mods and custom models.
- Refactored internal data handling and registration for better maintainability and future
### 6.7.1
- Fixed #657 and #656 by adding additional client side checks for vanilla bug.
### 6.7.0
- Fixed #650 by implementing Wolf Leg Animations in setupAnim method.
- Fixed #648 by fixing canBeHitByProjectiles translation.
- Fixed #645 by adding
allowBypassInvulnerabilityconfig option to allow/deny bypassing
- Fixed delete button showing label even with small width.
- Fixed up and down buttons not positioned correctly in some cases.
- Fixed name tag showing up for dialog and configuration UI.
- Fixed distance action issue were multiple actions are not properly triggered.
- Fixed issues with NPC presets.
- Fixed Cat NPC and Wolf NPC owner data not syncing properly.
- Added preset browser for easier selection of common NPC presets.
- Added preset .snbt (text) export and import functionality for sharing NPC presets.
- Refactored existing NPC presets to use new .snbt format.
- Refactored spawner system to use new preset format for better maintainability and future
### 6.6.2
- Fixed #643 by rework scaling system.
- Fixed scaling not properly updating hitbox and nametag position after restart / reload.
- Added MID and MOUSE_OVER name tag visibility modes for finer control over NPC name display.
- Added team-based name tag visibility support respecting vanilla Team.
### 6.6.1
- Fixed #638 by refactored internal data handling for display attributes.
### 6.6.0
- Fixed #634 by implementing asynchronous texture loading with dedicated thread pool.
- Fixed texture loading blocking render thread causing game freezes.
- Fixed race conditions in texture reload protection using atomic operations.
- Fixed resource leaks in HTTP connections during remote texture downloads.
- Fixed URL validation spam allowing multiple simultaneous downloads of the same texture.
- Fixed exception handling for remote image validation preventing crashes on invalid URLs.
- Fixed
defineId called for:warning messages during NPC loading. - Refactored texture loading architecture with multi-level defense and rate limiting.
- Refactored entity data registration logic for better maintainability.
- Converted data classes to modern Java records for better immutability and thread-safety.
- Added thread-safe session server spam protection with ConcurrentHashMap.
- Added comprehensive error recovery with automatic cooldown reset on failures.
- Improved texture loading with 2-thread pool and 500ms rate limiting.
- Improved exception handling with specific catch blocks for IIOException and FileNotFoundException.
### 6.5.2
- Fixed Villager profession and job skin issue.
- Improved GitHub workflows by adding cache for gradle dependencies.
- Improved Gradle build time and cleanup tasks.
### 6.5.1
- Fixed #632 by implementing ON_KILL action type and event.
- Fixed #629 by improving texture handling performance, caching, and memory usage.
- Fixed kill command is not working on NPCs.
- Fixed texture reload protection preventing cache reload after eviction.
- Fixed WebP validation bug in remote image validator (missing return statement).
- Refactored texture handling logic for better maintainability and future improvements.
- Added time-based reload protection (60 seconds) to replace permanent blocking mechanism.
- Added missing variant textures for chicken, pig and wolf.
- Added additional unit tests for texture handling.
- Improved gradle build tasks.
### 6.5.0
- ⚠️ Removed jar-in-jar bundle approach for better mod compatibility and api capabilities.
- Fixed #627 scissor implementation for better compatibility with other mods.
- Fixed #625 lively animation issues when using rotated or moved model parts.
- Fixed default animation are canceled when using scaled model parts.
- Added better pose animation control with smart, default und none options.
### 6.4.1
- Fixed #626 screen switching logic for different NPC UUIDs, thanks to
Spawnbladefor the detailed
### 6.4.0
- Fixed #626 by improving dialog data validation and error handling.
- Fixed #623 by refactoring render data and render handling.
- Fixed #622 by making sure custom data are properly saved and loaded.
- Fixed open dialog action type to allow opening dialogs from other NPCs.
- Fixed hashing issues by adding missing equals and hashCode methods for ConditionDataSet and
- Added custom data test item for #622 and easier testing of custom data.
- Improved records and fixed potential issues with missing data.
### 6.3.0
- Refactored config ui specific components and removed them from the core mod.
- Fixed dialog data by filtering dialog data before sending to the client.
- Fixed dialog editor layout issues and improved usability.
- Fixed missing default values for some dialog data fields.
- Added dialog priority support to control the order of dialog execution.
- Added condition support for dialog and scoreboard actions.
- Added frequency support for dialog to limit how often an dialog can be shown.
- Added new NPC preset to for scoreboard and condition support.
- Improved dialog button data format by removing redundant fields.
### 6.2.0
- Fixed legacy custom name parsing.
- Fixed string injection within dialogs.
- Fixed missing translation for action types.
- Added scoreboard action type to increase, decrease, set scoreboard values.
- Added
@score(...)NPC macro to display scoreboard values in the dialog. - Added additional unit tests.
- Improved spin button with indicators and better usability.
### 6.1.2
- Fixed container and menu sync issues with missing close container packets.
- Fixed close button not working in some cases.
- Fixed jumping mouse cursor between screen transitions.
- Fixed translation files and removed duplicate and deprecated entries.
- Moved Easy NPC wand to existing core item tab instead of creating a new one.
- Added cat pose support for different model parts (except tail).
- Improved EasyNPCWand glowing effect performance by disabling it when not needed.
- Improved custom entity detection by excluding non-living entities like displays, makers, throwns
- Improved cat variant handling.
### 6.1.1
- Fixed #615 by checking if item is equipped in one of the hands.
- Fixed #612 by re-validating entity types.
- Fixed #610 by force sync of hat and head layers for specific models.
- Fixed orc textures.
- Fixed cat variant handling for 1.21.5.
- Fixed player render by adjusting render state
skinfield. - Fixed cat renderer by adjusting render state
texturefield. - Fixed position, scaling and rotation preview.
- Fixed Fairy model.
- Improved custom model support and performance, by moving related logic into to client side only.
- Improved caching of player to UUID mappings for player skins.
- Limited change model commands and logic to Doppler NPCs only.
- Added renderEntityRaw method to render NPC as-it-is.
### 6.1.0 ✨
This is a major release. Please back up your worlds and NPC data before updating. This version
contains many improvements, optimizations, and internal changes that are **not fully compatible**
with earlier releases.
⚠️ Breaking changes
- Existing NPCs and their configuration data from versions before 6.1.0 may not load correctly or
- Internal data formats and some behaviors have been refactored to support new use-cases.
🧩 New modular structure
Easy NPC is now split into three separate mods:
- Easy NPC** – Bundle that includes both Core and Configuration UI for a plug‑and‑play experience.
- Easy NPC: Core** – Lightweight runtime and logic for NPCs, with minimal dependencies. Intended
- Easy NPC: Configuration UI** – Standalone configuration interface for creating and editing NPCs.
🎯 Why this change?
- Allows servers and modpacks to ship only the **Core** mod on the server side for a leaner setup.
- Reduces memory usage and load times when the UI is not required everywhere.
- Makes development and testing faster by separating UI and core logic.
[history]: https://github.com/MarkusBordihn/BOs-Easy-NPC/commits/
[upgrade_guide]: https://github.com/MarkusBordihn/BOs-Easy-NPC/wiki/Upgrading
## Note
This change log includes the summarized changes. For the full changelog, please go to
the [GitHub History][history] instead.
Note: Please always back up your world / NPCs before updating to a new version!
Check the [upgrade guide][upgrade_guide] for more information.
### 7.14.0
- Fixed #846 by keeping custom poses for players who start seeing the NPC later.
- Fixed attribute and trading settings missing for players who start seeing the NPC later.
- Fixed changed max uses, XP and trading type not shown in the trading screens until reload.
- Fixed
/easy_npc sound setchanges not reaching players until the NPC was reloaded. - Added game tests that check NPC poses and settings after respawns and for new players.
### 7.13.0
- Fixed color and formatting tags in dialog button names showing as plain text.
- Fixed the button preview in the editor showing lowercase names as a raw translation key.
- Fixed the "Move EasyNPC" item not working for NPC owners outside of creative mode.
- Fixed
/easy_npc owner setreporting success even when the owner could not be changed. - Fixed the game crashing when the URL or player skin screen showed a skin download error.
- Fixed the preset browser search showing no results after scrolling down the list.
- Changed the network protocol version, so client and server must run the same mod version.
- Added
@initiator,@npcand@score()support to dialog button names to fix #841. - Added automatic client tests with the Client Runtime Interface Toolkit.
- Larger core refactoring and code cleanup.
### 7.12.2
- Fixed the Fairy hitbox being far too small, so its name tag and speech bubble sat in its body.
- Fixed scaled NPCs keeping their old hitbox and eye level, so hits, clicks and looking missed.
- Fixed oversized names, lists and NPC data in network packets being read without any limit.
- Fixed invalid NPC positions, scales, attributes, names and durations from being applied.
- Changed Fairy NPCs to take up the space of their model, so they collide and can be clicked.
- Changed Skeleton, Stray and Bogged NPCs to the vanilla hitbox height, they were slightly short.
- Changed the network protocol version, so client and server must run the same mod version.
### 7.12.1
- Fixed #836 by always showing "Restore", including datapack presets, with a reason tooltip.
- Fixed preset import and export messages missing, wrong or not warning about replaced NPCs.
- Fixed the preset browser reloading on each keystroke, leaking NPCs and clearing the selection.
- Fixed selection box drop-down lists being covered by the checkboxes and labels behind them.
- Fixed the preset list sorting, filter order and layout clipping options in small windows.
- Fixed
/easy_npc preset import datawithout a position importing it as a default preset. - Fixed spawn rate limit leaks, unstable preset IDs and "Spawn New" stacking NPCs on one spot.
- Changed "Restore" to refuse instead of spawning a copy when it is not permitted.
- Added sorting, a match count, reload, auto-close, the NPC ID and tooltips for presets and skins.
- Added
matching <pattern>batch imports with limits, a confirmation and a clickable position.
### 7.12.0
- Fixed #833 by showing Easy NPC Wand outlines only to the wand holder, owner and admins.
- Fixed #834 by adding "Set Home Here" and "Reset Home" buttons to the position configuration.
- Fixed #835 by keeping the NPC ID and position in exported presets, so imports restore the same
- Fixed preset imports and spawn eggs losing the owner's list entry and owner objectives.
- Fixed NPCs restored from an automatic backup losing their owner and becoming ownerless.
- Fixed selection lists showing only their first six entries and hiding the rest.
- Changed importing a preset to update the original NPC at its stored position instead of adding a
- Changed completed trades to play the "Trade completed" sound, which stayed silent before.
- Changed the API dialog call to report an unknown dialog label instead of always reporting success.
- Changed NPCs without arms to carry held items at the head or body instead of hiding them.
- Changed the optional Easy Model Entities dependency to require version 2.4.0 or newer.
- Added a "Sound" configuration with sounds for dialogs, speech, swimming, eating and fall damage.
- Added a searchable sound selection with volume and pitch sliders to the "Sound" configuration.
- Added a "Block Vehicles" option to keep NPCs out of boats, minecarts and modded chairs.
- Added the profession selection to all skin configurations and a new built-in skin per NPC type.
- Added client settings to hide name tags behind walls and
highlightEnabledfor wand outlines. - Added an "Exists" condition operation and API access to NPC movement, actions and presets.
### 7.11.0
- Fixed #828 by no longer freezing the server on logout when NPCs follow or watch the player.
- Fixed #831 by moving routine NPC removal messages to the debug log.
- Fixed #832 by making humanoid NPCs ignore custom player models, animations and poses.
- Fixed hourly NPC backups stuttering on large worlds and retaining timestamps of removed NPCs.
- Fixed hourly NPC backups losing the identity, owner and position of the backed-up NPC.
- Fixed owner-login restoration duplicating, repeatedly restoring, reviving or moving unloaded NPCs.
- Fixed NPC index and file synchronization issues causing lost NPCs, crashes or false warnings.
- Fixed stale NPC data after unloading, avoided redundant writes and added repeated-unload warnings.
- Fixed the preset browser failing to list custom and world presets saved in the SNBT format.
- Fixed speech bubbles losing their text and turning translucent with Iris shaders.
- Fixed the "Opacity" of an NPC being ignored while a shader pack is active.
- Fixed text formatting and macro parsing for translated speech bubbles and mod API texts.
- Fixed speech bubbles and their text staying hidden behind blocks while a shader pack is active.
- Added
minLightLevelto keep speech bubbles readable in dark surroundings.
### 7.10.0
- Fixed #829 by allowing bats and other non-walking mobs as the render entity of a Doppler NPC.
- Fixed the Wandering Trader NPC rendering without its texture.
- Fixed NPCs rendered as a bat, frog or warden showing a static pose instead of their animation.
- Fixed the NPC name tag showing above the previews in the "Custom Models" configuration.
- Fixed speech bubbles being cut off by walls, doorframes and the NPC's own body.
- Fixed the previews in the "Custom Models" configuration.
- Changed the previews in the "Custom Models" configuration to stand on a common ground line.
- Changed overlapping speech bubbles to move apart and to stay visible when the NPC is off-screen.
- Changed "Navigation: Automatic" to use flying movement for NPCs rendered as a flying mob.
- Changed the render entity list to hide seats, paintings, thrown items and other non-mob entities.
- Added a "Min. hover height" slider for flying NPCs and client settings for speech bubbles.
### 7.9.0
- Fixed modded fish NPCs, like the ones of Tide 2, spinning around instead of swimming upright.
- Fixed "Navigation: Automatic" using ground movement for water NPCs and aquatic model NPCs.
- Fixed the "Random Swimming" objective never moving an NPC that uses aquatic navigation.
- Fixed a swimming NPC shaking or twitching in place instead of holding its tilt and swim depth.
- Fixed a swimming NPC turning in circles forever when it could not reach its next path point.
- Fixed an NPC that fell into water never getting out of it again.
- Fixed a following NPC searching a new path every tick while its target was unreachable.
- Fixed the "Move to" actions stopping short of a raised target or not starting while in the air.
- Fixed "Move back to Home" ignoring height differences and never returning from beyond 32 blocks.
- Fixed the "Opacity" input field being too narrow to show a value of 100.
- Fixed a damaged NPC with an Easy Model Entities model never flashing red.
- Changed modded water NPCs to swim level, vanilla water mobs keep their tilt as before.
- Changed the "Move to" actions to walk up to 48 blocks and to teleport only beyond that range.
- Changed "Move to" and "Move back to Home" to give up after three seconds without progress.
- Changed the timeout of a "Move to" action to count real ticks, it ran twice as long before.
- Changed a new "Random Swimming" objective to rank below following, fleeing and attack goals.
- Changed "Opacity" of an NPC with an Easy Model Entities model to be applied by that mod itself.
- Changed the minimum Easy Model Entities version to 2.3.0, older versions disable the integration.
- Added "Depth below surface" and "Height above floor" sliders for the swim level of an NPC.
- Added log entries for the NPC files written on a world save, with a warning above 250 ms each.
### 7.8.1
- Fixed #827 by rendering fish NPCs in water upright instead of always flopping on their side.
- Fixed #828 by keeping a damaged NPC from blocking the world save, it now falls back to defaults.
- Fixed a restored NPC picking up a random preset ID that changed with every save.
- Changed NPC data to only be written to disk when it actually changed.
### 7.8.0
- Fixed smaller text and UI issues.
- Changed an NPC that is already standing at its target position to finish the movement right away.
- Changed the "None" skin tab to "Advanced", which now holds "Disable Skin" and the texture field.
- Changed the minimum Easy Model Entities version to 2.2.0, older versions are no longer accepted.
- Added a "Move to" action, which sends an NPC to a position, a player, its owner or its home.
- Added a "Move to and Wait" action, which runs the following actions only after the arrival.
- Added an arrival radius, a timeout and an optional teleport to both move actions.
- Added an "Opacity" attribute from 0 to 100, which fades body, armor and hand items together.
- Added a "Set Opacity" action, which turns an NPC into a ghost or hides it completely.
- Added the "Lantern Wraith" preset, a ghost walking a square with a short line at every corner.
- Added API access to the move actions and the opacity of an NPC.
- Added a "Resource Location" skin type, which renders any texture of a mod or a resource pack.
- Added an "Advanced" skin tab, which previews the NPC with the entered texture before applying it.
### 7.7.7
- Fixed #821 by keeping the transparency of 64x64 skins, which Fresh Moves needs for its eyes. Skins
- Fixed #818 by running trade actions for Villager and Wandering Trader NPCs as well.
- Fixed a dialog with several text variants switching its speech bubble size every second.
- Fixed the skin cache storing the processed image instead of the original download.
- Fixed the untranslated interval names, like
PER_DAY, of the "Execution Limit" condition. - Fixed the
sitanimation of Easy Model NPCs, which never used the built-in sitting pose. - Fixed the speech bubble being cut off by the head of an NPC when a player stood close to it.
- Changed speech bubbles to keep their screen size and to move down or aside when a player is close.
- Changed the speech bubble text to render 20% larger than a name tag.
- Changed a time based action set with a "Wait" action to run in order instead of picking one entry.
- Changed dialog texts to wrap later, so an existing dialog can switch to the wider screen layout.
- Changed fallback actions to skip screen actions without a player, like the regular actions do.
- Changed the minimum Easy Model Entities version to 2.1.0, older versions disable the integration.
- Added a "Wait" action, which pauses the following actions of an event for a chosen duration.
- Added the "Countdown Timekeeper" preset, a speech bubble count to ten ending in sound and sparks.
- Added scaling and rotation for Doppler NPCs behind the "Experimental Features" checkbox. Both only
- Added a "Sound" action, which plays a sound at the NPC with sound category, volume and pitch.
- Added "Every 5 Minutes" and "Every 15 Minutes" to the "Execution Limit" condition.
- Added a "Player Idle" condition, which checks how long a player has not moved.
- Added an "Immovable" attribute, which keeps an NPC in place against pushing and knockback.
- Added
/easy_npc pauseto pause a single NPC or all NPCs; the global pause ends with the server. - Added API access to the sound action, the pause state and the idle time of a player.
- Added a texture override per model slot for Easy Model NPCs over
/easy_npc render texture. - Added a "Repeat" playback mode with a count and a time limit to the "Play Animation" action.
- Added API access to animation variants, texture slots and textures of Easy Model NPCs.
### 7.6.0
- Fixed unclear mod conflict errors for duplicate entity data tracker IDs.
- Fixed third-party health bars rendering over NPC previews in configuration and dialog screens.
- Fixed Doppler and Easy Model Entities NPCs using default hitboxes instead of their model size.
- Fixed the
/easy_npccommands suggesting no NPC UUIDs at all on a server. - Fixed the pose list of the "Set Pose" action drawing over its input field.
- Fixed the untranslated "Loop", "After current" and "Action Data Type" labels of the action editor.
- Fixed the missing hint text of the "Chance" condition.
- Fixed long condition hints running out of the editor screen instead of wrapping.
- Fixed the misaligned help icons and text buttons of the "Message" action.
- Fixed changes to the "Set Pose", "Play Animation" and "Stop Animation" actions not being saveable.
- Fixed the speech bubble text sitting closer to its upper border than to its lower one.
- Changed the NPC suggestions to list the crosshair NPC first and only own NPCs without permissions.
- Changed a preset export to only store what differs from a new NPC, without position or owner.
- Changed a preset without objectives or actions to fall back to the defaults of its NPC type.
- Changed events without a player, like "On Spawn" or "On Kill", to check their conditions. An
- Changed a time based action to pick the owner as
@initiatorwhenever the owner is nearby. - Changed speech bubbles to stay visible from 5 up to 18 seconds, depending on the text length.
- Changed the "Set Pose" action to only show its input field for the "custom" pose entry.
- Added time based actions on five fixed steps, from every ~1 second up to every ~15 minutes.
- Added a "Message" action for chat, system message and speech bubble text without a command.
- Added text variants, a sender name, a recipient and translation keys to the "Message" action.
- Added the speech bubble graphic as
easy_npc:textures/gui/speech_bubble.pngfor resource packs. - Added a "Chance" condition in percent and a "Relationship" condition for owner and faction.
- Added spawn, owner login, state change, day / night, weather and the missing "On Trade" events.
- Added a base preset per NPC type under
easy_npc:api/preset/base/, usable as a parent preset. - Added the "Wandering Companion" preset, a talkative NPC built from time based messages.
- Added an action registry, an action handler, a preset validator and richer event data for mods.
- Added a tooltip with name, type and distance to every NPC suggestion of the
/easy_npccommands. - Improved the NPC suggestions, which appear without typing and tolerate a near miss of one block.
### 7.5.0
- Fixed #814 by giving every Cobblemon NPC its own animation state instead of one per species.
- Fixed #813 by letting "Move back to Home" work at any distance instead of only near its home.
- Fixed #812 by checking once per session whether a player changed their skin.
- Fixed #810 by accepting Cobblemon aspects of resource packs instead of only "shiny" and "female".
- Fixed the home position of an NPC always reading as unset, which hid "Home" in the configuration
- Fixed NPCs spawned from a preset, the preset browser or a respawn never getting a home position.
- Fixed an NPC spawned from the preset browser keeping the home position of the world the preset was
- Fixed NPCs being drawn as a white silhouette with a shadow in the configuration, skin and preset
- Fixed the server crashing when an NPC with a "Tempt" objective ticked its goals.
- Fixed a single or boss spawner spawning without any limit when its preset carried no stored NPC.
- Fixed the "Legacy Easy NPC Data" warning appearing for newly created NPCs.
- Fixed missing transparency corrections for old 64x32 skins, which showed layer artifacts.
- Fixed the player skin screen freezing for a moment while a player name was looked up.
- Fixed the "Reset look at ..." objective label, which read "Reset loot at ..." in some languages.
- Fixed the "No Gravity" attribute being ignored after a preset import, which let NPCs fall.
- Fixed the Fabric game tests, which crashed on start because of the development helper mods.
- Fixed NPCs losing their owner when they were spawned again after a despawn.
- Fixed objectives being deleted from an NPC when the mod providing them was missing at start.
- Fixed importing a preset without a stored id, which spawned an NPC without owner and home.
- Fixed "Follow owner" and "Look at owner" keeping their old target after the owner was changed.
- Fixed attack targets staying assigned to an NPC after the targeted entity was gone.
- Fixed the "Look at Item" objective, which could be stored but never did anything.
- Fixed walking animation for Doppler NPC and 3rd party models.
- Fixed Forge never running its server start-up step, which left NPC tracking, factions and the
- Fixed Forge development runs starting without any mixins, which disabled the vanilla entity
- Changed the movement objectives to a fixed order: flee, follow, return home, then stroll. NPCs
- Changed inserting a preset into a vanilla monster spawner to keep its delay, count and range.
- Changed "Follow owner" and "Look at owner" without a chosen target to follow the owner of the NPC.
- Changed datapack presets to
easy_npc/preset/, the old folder still works, but only for easy_npc. - Changed the preset browser to always list its entries in the same order.
- Removed the experimental user-defined NPCs; the extra config file is no longer read or created.
- Removed the unused
SERVER_SKINskin type. - Added a new game test structure to support game tests in 1.21.11 and higher.
- Added a reload button to each entry of the player skin screen, to fetch a single skin again.
- Added the reason to the log whenever an NPC is removed, so an unexpected despawn can be traced.
- Added suggestions to
/easy_npc render set species. - Added support for presets from other mods, which no longer have to use the
easy_npcnamespace. - Added a preset visibility that hides a preset from the preset browser and the NPC screens.
- Added a teleport distance and a resting spot offset to the follow objectives.
- Added item tags, a "can be scared" option and a "only without owner" option to "Follow item".
- Added an item field to the look objectives, so an NPC can watch a chosen dropped item.
- Added an identifier per NPC, so a mod can find its own NPCs again.
- Added an option to spawn an NPC again when its owner logs in.
- Added game tests for NeoForge, which had none, and restored the spawn egg, dialog screen, data
- Added game tests for every configuration and editor screen, covering all three mod loaders.
- Added game tests for the home position, covering the spawn default, the stored value and
- Improved the model name parsing, which mistook a species ending in "_shiny" for a variant.
- Improved following of flying NPCs, which now steer directly when there is no path through the air.
- Improved third party support with an API for presets, own objectives and objective configuration.
### 7.4.0
- Fixed #807 by no longer pulling every same-type NPC within 32 blocks into a "Defend Self" fight.
- Fixed #805 by evaluating all visibility settings together instead of stopping at the first one.
- Fixed #804 by keeping the custom name on Doppler NPCs for name based textures and the name tag.
- Fixed #803 by adjusting assets to match typical Minecraft style instead of generic UI style.
- Fixed the day and night detection, which counted sunrise as night and sunset as day.
- Fixed the visibility in the Nether and the End, which used the Overworld time.
- Fixed the time and game mode visibility checkboxes appearing in a random order.
- Fixed game tests only being able to fail on their first assertion, which hid later failures.
- Fixed the "Saddled" horse skin variants, which never showed a saddle.
- Changed "Visible to Owner" and "Visible to Team" to also follow day, night and game mode.
- Changed Evoker, Illusioner and Vindicator variants without "Crossed Arms" to keep their arms down.
- Added a "Defend Faction" objective that attacks whoever hurt a nearby faction member or player.
- Added a system message when faction members fight each other and the faction stays out of it.
- Added a head equipment slot for Illagers so their captain banner can be removed or swapped.
- Added a day and night preview to the display configuration screen.
- Added unit and game tests for the visibility attributes and the faction defense.
- Improved the visibility check performance by reading the display attributes only once per check.
- Improved display attributes from older versions by completing them with their defaults.
- Improved the attack objective screen by disabling "Protect Owner" and "Defend Faction" when unset.
### 7.3.0
- Improved skin variants by carrying their data as typed fields instead of parsing variant names.
- Centralized the Cobblemon mod id and default model on shared constants.
- Reduced duplicated enum code with a shared
EnumUtilshelper forget(String)lookups. - Optimized villager profession and type lookups to use direct registry keys instead of scans.
- Optimized enum name lookups by caching tag names, ids and keys once at construction.
- Added unit and game tests for skin variants, villager resolution and the enum helper.
### 7.1.2
- Fixed #801 by using combination for NPC, Dialog and Action UUIDs to avoid collisions for action
### 7.1.1
- Fixed #800 by lazy loading entity types.
- Fixed #799 by fixing edge cases and adding additional documentation and better log messages.
- Fixed #798 by considering console, commands and command blocks as trusted command sources.
- Fixed a critical single-player / LAN issue where client and server NPCs shared the same registry.
- Fixed a memory leak in the configuration menu handling and added timeout and disconnect cleanup.
- Fixed duplicate downloads when several NPCs request the same skin at the same time.
- Fixed skin lookups failing after a error so a slow server no longer freezes the game.
- Fixed the URL skin screen freezing the game while checking a remote image; the check now runs in
- Added a new World Spawner block that limits an NPC preset across the whole world (all dimensions),
- Hardened remote skin downloads with a strict size limit and safe redirect handling to prevent
blockPrivateAddresses setting.- Improved server performance by only sending entity and player load events to NPCs that actually
### 7.0.0
- Fixed #794 by using the expected type for NPC rendering.
- Fixed scaling screen preview by pinning the entity feet to the 0 line of the scale ruler, so NPCs
box updates.
- Fixed #791 by adding Wandering Trader NPC type.
- Fixed #788 by extending the AI safeguards to Epic Fight and raw NPC variants (Piglin, Villager,
- Fixed #787, #531, #237 and #184 by adding a faction system with
/easy_npc factioncommands,
- Fixed #787, #771 and #572 by adding a new
targetobjectives tab to attack hostile factions or
- Fixed #786 by adding gender and shiny model variants for Cobblemon NPCs, searchable via
female
shiny in the model selection.- Fixed faction combat between invulnerable NPCs by adding the new
Attackable by Factionscombat
- Fixed Cobblemon model selection previews for oversized species by scaling with Cobblemon's own
- Fixed faction management edge cases by validating faction names, sorting faction lists and
- Fixed custom skin reloads by loading and clearing texture caches per skin model instead of always
- Improved the
Attackable by Players/Monsters/Factionscombat attributes to work independently of
Invulnerable, each opening a targeted hole for its own attacker group.- Improved preset command and network handling by splitting the large handlers into smaller focused
- Added Easy Model Entities Support.
- Added faction manager and faction editor screens to create, color and delete factions and manage
FACTION_MANAGEMENT security feature.- Added new
Miscattributes tab as home for the NPC faction assignment. - Added reusable warning and help icon components for inline hints with tooltips.
- Added additional unit and game tests for factions, target objectives and Cobblemon model variants.
### 6.25.0
- Fixed #782, #636, #622 by preserving data components during validations.
- Fixed #780 by caching remote texture downloads and reducing duplicate registrations.
- Fixed #767 by clamping attribute sliders against extreme values from other mods.
- Fixed #754 by adding custom data item matching for NPCs with actions and conditions.
- Fixed texture manager running in the wrong thread may cause crashes and deadlocks in >= 1.21.x.
- Fixed empty UUID handling for action conditions.
- Fixed execution limit reset for actions.
- Added texture registration queue to avoid multiple simultaneous downloads in the same tick.
- Added NPC coin, key and red token as consumable items for NPCs with actions and conditions.
- Added
Welcome Coin Traderas example NPC preset with custom coin, key and red token item data. - Added attribute safeguards against extreme values from other mods.
- Increased fallback max health value from 1024 to 4096 for high-health NPCs.
- Improved texture manager by reducing duplicate texture checks and registrations.
### 6.24.0
- Fixed #459, #775 by adding an option to block interactions with invisible NPCs.
- Fixed #774 startup crash related to optional Epic Fight and Cobblemon entity type maps.
- Fixed #773 by checking timed trade resets during base ticks and before opening trade screens.
- Fixed trade reset timing by increasing internal tickers correctly.
- Added time of day and weather conditions for #459.
- Added additional unit and game tests for trade resets, ticker handling and entity attributes.
- Added
Skywatch Scoutas example NPC preset with time of day and weather conditions.
### 6.23.0
- Fixed #774 by migrating isSunBurnTick error to 26.x.
- Fixed #772 by adjusting texture retries with 403 and 404 errors and lowering logging.
- Fixed #770 item rendering for Epic Fight NPCs (Evoker, Pillager, Vindicator and humanoid skins).
- Fixed #769 door loops with NPCs not reliably opening or closing doors.
- Fixed #760 by adding a dialog option and config setting (buttonConditionMode: LOCK or HIDE) to
- Fixed #709 by adding color picker popup for names with 32 colors and/or a manual RGB/hex value.
- Fixed NPC name color being reset when renaming without a specified color by preserving the
- Improved the door movement attributes so "Pass Door" is automatically enabled while "Open Door"
### 6.22.0
- Fixed #766 by passing the full server player context to command execution for better compatibility
- Fixed #764 by adding entity health, npc health conditions and NPC preset
Grukk, the Sparring Post as example for using these conditions.- Fixed #763 by making sure dialog button execution limits are now recorded.
- Fixed #758 by providing a example NPC preset named
One Wish Companion. - Fixed crashes related to 3rd party villager AI reading non-registered brain memories on Easy NPC
- Fixed Dialog buttons are not locked for server-side data as preparation for #760 and #644.
- Fixed #628 by adding conditional dialog opening support / command for better control over when
- Added brain AI for Piglin and Piglin Brute NPCs and registered the full vanilla brain memory set.
- Added additional guns to the gun tag for #757.
- Added a new "Open Dialog (Conditional)" action that opens a named dialog only if its conditions
- Added new entity health and npc health conditions for actions, dialogs and dialogs buttons.
- Added Piglin, Piglin Brute and Zombified Piglin NPCs invulnerable, for consistency with other
- Added a new "Knockback Immunity" combat attribute that prevents the NPC from being knocked back by
- Added a new "Explosion Immunity" combat attribute that makes the NPC immune to explosion damage
- Moved the "Projectile Collision" attribute to the Combat attribute screen, where it fits better
### 6.21.0
- Fixed item attachment for Illagers in crossed-arms pose.
- Fixed broken illager crossbow attack goal.
- Fixed crashes related to 3rd party items which are not renderable as hand items #756.
- Fixed crashes related to 3rd party mixins trying to access non-existing model parts #756.
- Fixed log.info spam message by reducing log verbosity and adding additional checks for custom
- Improved EasyNPCModelManager performance.
- Refactored NPC renderers to remove default hand item layer.
### 6.20.0
- Fixed crashes related to 3rd mods trying to access non-existing NPCs goals.
### 6.19.0
Note: This update adjusted the dialog background images by 10x6 pixels, which may require users to
adjust their custom dialog backgrounds if they are using custom ones.
- Fixed #752, #130 by adding dialog button condition support to allow to disable buttons.
- Fixed #683, #215 by adding typewriter effect support for dialog text.
- Fixed #690, #309 by allowing conditions for dialog, dialog buttons and interactions.
- Fixed smaller UI issues with dialog screen layout and background.
- Refactored dialog background images by 10x6 pixels on each side.
- Refactored dialog screen layout to better fit the new background size and improve appearance.
- Added typewriter effect and client configuration for dialog text.
- Added condition symbols to indicate the condition status for dialog, buttons and interactions.
- Added amount field for item conditions to allow checking for specific amounts of items.
- Added
Threshold Wardenas example NPC preset with various conditions and actions. - Added smaller bug fixes and optimizations related to dialog conditions and button states.
### 6.18.0
Note: This update changes the internal data format for conditions and actions, which may reset /
remove legacy existing execution-limit entries without stored IDs.
- Fixed #745 by adding conditions for actions to allow more complex and dynamic behavior.
- Fixed #652 by adding dialog button tooltip for longer texts.
- Fixed #687 by adding command value tooltip to show the full value.
- Added Experience Level conditions.
- Added Game-mode conditions.
- Added has item in inventory condition.
- Added has item in hand condition with (main hand and off-hand) support.
- Added player health condition.
- Added player tag condition.
- Added player team condition.
- Added Goldmere example NPC preset with various conditions and actions.
- Added negative condition support to allow negating conditions for more complex logic.
- Removed parameter pseudo IDs for
ActionDataEntryand replaced them with random UUIDs. - Refactored condition system to allow more condition types.
### 6.17.0
- Fixed #738 by adding additional tooltips for "Execute as player"
- Fixed to detailed logs by reducing log.info messages during startup and in-game.
- Added additional unit and game-tests.
### 6.16.0
- Fixed #732 by providing option to disable ESC key and close button for dialogs.
- Fixed #723 by avoid auto-close in specific cases like trading screens.
- Added general dialog configuration options to allow users to customize dialog behavior.
- Added avatar scaling and position offset options for dialogs.
- Added missing translation keys.
### 6.15.1
- Fixed #735 by extending the correct base class.
- Fixed several 26.1.2 specific issues from manual spawn testing.
### 6.15.0 (Trades, Player Heads, Epic Fight and QOL updates)
- Fixed #731 by resyncing species data, if species list is empty on the client.
- Fixed #730 by improving Epic Fight integration and enabled experimental features.
- Fixed #729 by making sure trade uses are stored correctly.
- Fixed #728 by adding custom head support for player heads.
- Fixed #689 by showing remaining trade uses and allow resetting manually and automatically.
- Fixed #218 and #132 with new trade configuration screen and better support for custom trades.
- Fixed trade specific edge by switching between basic and normal/advanced trading mode.
- Fixed dialog button text is truncated with tooltip showing the full text.
- Fixed Cobblemon animation issues by syncing animation state with Cobblemon Animation System.
- Added per trade specific actions to allow users triggering actions after buys.
- Added trade reset button to reset all trades easily.
- Added trade usage information to trade configuration screen.
- Added experimental feature state to allow users to manually enable experimental features.
- Added Griselda Grindstone as example trader with actions.
- Cleanup test files.
### 6.14.0
- Fixed #727 by making sure changes are synced to the client when changing values.
- Fixed #726 by adding additional allow lists for specific commands.
- Fixed #686, #389, #304, #211 by adding basic Cobblemon support with Cobblemon NPC.
- Fixed dialog misalignment and navigation issues by adjusting dialog sprites and screens.
- Fixed x and z root rotation by correcting rotation logic and pivot calculations.
- Added basic Cobblemon support with custom NPC type and model for testing.
### 6.13.0 (Security and Permissions Updates)
Notes: This update includes better security checks and permissions for multiplayer environments. It
allows to execute server commands which can be potentially dangerous if used with malicious intent.
- The update splits the model root data and logic from the rest of the model part data and logic,
- Fixed #725 by separating model root data and logic from the rest of the model part data and logic.
- Fixed #722 by supporting .sbnt files as local presets.
- Fixed #675 by adding dedicated assets for dialog and config screen backgrounds.
- Fixed #605, #532, #529 with new security checks and permissions system.
- Fixed #469, #311 by adding experimental api documentation and examples for custom model support.
- Fixed double rendering of config screen background by removing redundant background rendering.
- Fixed Ghast and Slime hitbox and name tag position issues by adjusting bounding box.
- ⚠️ Added security checks to prevent potential exploits and allow safe usage in multiplayer
- Replaced dynamic dialog screen background with a static one for better performance, customization
- Replaced dynamic config screen background with a static one for better performance.
- Refactored config-ui specific components and removed them from the core mod.
- Removed duplicated sprite sheets.
- Prepare permission system for possible Luck Perms integration in the future like #712.
- General code cleanup and optimizations related to config screen rendering and assets.
### 6.12.0
- Fixed #714 by adding additional checks for custom model part list based on vanilla models.
- Fixed #713 by reducing log verbosity with downgraded per-NPC INFO messages to DEBUG and
- Fixed #711 by reduced oversized startup/config log output.
- Fixed NBT validation guard to prevent unnecessary buffer allocations in production.
- Added model part name constants to EasyNPCModelManager for consistent usage across mixins.
- Improved RenderEntityTypeSupportConfig by enhancing filter logic and optimizing data structures
- Removed verbose debug logs that dump large data structures.
### 6.11.1
- Fixed #710 by improving backward-compatible parsing for recoverable trade data.
### 6.11.0
- Fixed #703 rendering issue with new custom layer system and hand renderings.
- Fixed #701 by adding additional safeguards and logging for invalid trading offers.
- Fixed smart animation not working properly with modified head position.
- Fixed head tracking by moving player detection back to server side-only.
- Fixed CustomLookAtPlayerGoal to better handle edge cases and reduce jitter.
- Fixed issue with Doppler NPCs keeping their hand inventory.
- Improved PoseManager logging message.
- Updated logo with a new design.
### 6.10.0
- Fixed #698 by adding try and catch for 3rd party entity creation.
- Fixed #695 by clearing model part rotations/positions when switching to a
DEFAULTvanilla pose. - Fixed #695 by applying lock rotation and pose animation only when the NPC is idle.
- Fixed #695 by correcting root rotation pivot to use actual bounding box height instead of 0.5f.
- Fixed multiple objective registration issues including inverted
isTargetedPlayercheck, wrong
targets.
- Fixed goal reference being retained after objective is unregistered.
- Removed auto-lock of ROOT rotation when loading poses; root lock is now user-controlled.
- Added lock rotation checkbox to the advanced and custom pose configuration screens.
- Added model-specific pose key filtering in
ConfigurationMenuHandlerfor the default pose screen. - Added unit tests for
CustomPosition,CustomRotation,CustomScale,ModelPose,
ModelAnimationBehavior and ModelAnimationData.- Added
NPCDataIsolationTestHelperand game tests for Fabric and Forge. - Increased max head yaw range from 60° to 65°.
### 6.9.0
- Fixed #692, #666 by adding caching and safeguards to prevent redundant retriggering of NPC entity
- Fixed #651, #617 by adding basic custom poses for all supported NPC types.
- Fixed #597 by adding additional Flee goals for fleeing from players, villagers, monsters, ...
- Fixed pose loading to read directly from mod resources instead of copying files to disk.
- Fixed duplicate
saveNPCcalls on entity join by checking existing registry entry first. - Added
despawnandspawncommands to remove and re-spawn NPCs by UUID with configurable removal
- Added
ModelPoseAPIandEasyNPCEntityHandlerpublic API classes for controlling NPC poses and
- Added pose data files for all supported NPC types.
- Added lock rotation checkbox to the basic pose configuration screen.
- Added
MoveToPositionGoalto move an NPC to a position before executing a callback action. - Added
EasyNPCLookControlandEasyNPCBodyRotationControlto respect locked root rotation. - Added synced owner change and dimension change to the NPC entity data index.
- Added EasyNPCItemAttachmentLayer into various entity renderers.
- Added dedicated
Flee Objectiveconfiguration tab with objectives for fleeing creepers, monsters,
- Added
FOLLOW_ITEMobjective to the follow objectives tab to make NPCs follow item entities by
minecraft:apple).- Added
LookAtEntityByUUIDGoaland enabled the look-at-entity-by-UUID and look-at-owner objectives
- Added
persistentflag toSynchedDataIndexso that transient indices (e.g. crossbow charge,
- Added configurable
customParticlesEnabledflag toSlimeBasefor API consumers. - Added
SoundType.PETand mappedCAT_PURRto the cat NPC for tamed ambient sound variety. - Reduced log verbosity for periodic NPC save operations from INFO to DEBUG.
### 6.8.3
- Fixed #680 by enforcing version miss-match by upgrading network protocol version.
- Fixed #679 by resetting position, rotation and size for name tag.
- Fixed #665 by adding multi state slide for root rotations.
- Fixed #664 by adding option to disable following mouse cursor for easier posing.
- Fixed #663 by improve support for X and Z root rotations.
- Fixed #661 by adding quick rotation with NPC wand and sneaking to the NPC to rotate the root to
- Fixed move tool is wrongly triggering interactions by adding check for move tool in interaction
- Fixed Preset Item is wrongly triggering interactions by adding check for preset item in
- Fixed Slime and Ghast hitbox and name tag position issues by adjusting bounding box and eye height
- Fixed Slime and Ghast GUI position by adjusting offset values.
### 6.8.2
- Fixed #677 by extending
SafeMerchantDatawith notifyTrade to avoid crashes. - Added progression data support for leveling up NPCs based on player interactions and actions.
- Added global NPC tracking system for better management and debugging of NPCs across the world.
- Added
OriginalModelConfig.withVariantTexture()option to allow using variant textures with the
### 6.8.1
- Fixed #676 by using existing preset helper method instead of custom one.
### 6.8.0 (Adding API support)
- Fixed #667 by adding warning messages and additional checks for invalid network packets.
- Fixed Horse spawn eggs model.
- Fixed pose support for allay, chicken, creeper, fox, ghast, horse, illager, iron golem, slime and
- Added NPC base classes for better API support.
- Added NPC raw classes for advanced API support.
- Added Slim and Ghast NPC types.
- Added Custom Model API for easier integration with other mods and custom models.
- Refactored internal data handling and registration for better maintainability and future
### 6.7.1
- Fixed #657 and #656 by adding additional client side checks for vanilla bug.
### 6.7.0
- Fixed #650 by implementing Wolf Leg Animations in setupAnim method.
- Fixed #648 by fixing canBeHitByProjectiles translation.
- Fixed #645 by adding
allowBypassInvulnerabilityconfig option to allow/deny bypassing
- Fixed delete button showing label even with small width.
- Fixed up and down buttons not positioned correctly in some cases.
- Fixed name tag showing up for dialog and configuration UI.
- Fixed distance action issue were multiple actions are not properly triggered.
- Fixed issues with NPC presets.
- Fixed Cat NPC and Wolf NPC owner data not syncing properly.
- Added preset browser for easier selection of common NPC presets.
- Added preset .snbt (text) export and import functionality for sharing NPC presets.
- Refactored existing NPC presets to use new .snbt format.
- Refactored spawner system to use new preset format for better maintainability and future
### 6.6.2
- Fixed #643 by rework scaling system.
- Fixed scaling not properly updating hitbox and nametag position after restart / reload.
- Added MID and MOUSE_OVER name tag visibility modes for finer control over NPC name display.
- Added team-based name tag visibility support respecting vanilla Team.
### 6.6.1
- Fixed #638 by refactored internal data handling for display attributes.
### 6.6.0
- Fixed #634 by implementing asynchronous texture loading with dedicated thread pool.
- Fixed texture loading blocking render thread causing game freezes.
- Fixed race conditions in texture reload protection using atomic operations.
- Fixed resource leaks in HTTP connections during remote texture downloads.
- Fixed URL validation spam allowing multiple simultaneous downloads of the same texture.
- Fixed exception handling for remote image validation preventing crashes on invalid URLs.
- Fixed
defineId called for:warning messages during NPC loading. - Refactored texture loading architecture with multi-level defense and rate limiting.
- Refactored entity data registration logic for better maintainability.
- Converted data classes to modern Java records for better immutability and thread-safety.
- Added thread-safe session server spam protection with ConcurrentHashMap.
- Added comprehensive error recovery with automatic cooldown reset on failures.
- Improved texture loading with 2-thread pool and 500ms rate limiting.
- Improved exception handling with specific catch blocks for IIOException and FileNotFoundException.
### 6.5.2
- Fixed Villager profession and job skin issue.
- Improved GitHub workflows by adding cache for gradle dependencies.
- Improved Gradle build time and cleanup tasks.
### 6.5.1
- Fixed #632 by implementing ON_KILL action type and event.
- Fixed #629 by improving texture handling performance, caching, and memory usage.
- Fixed kill command is not working on NPCs.
- Fixed texture reload protection preventing cache reload after eviction.
- Fixed WebP validation bug in remote image validator (missing return statement).
- Refactored texture handling logic for better maintainability and future improvements.
- Added time-based reload protection (60 seconds) to replace permanent blocking mechanism.
- Added missing variant textures for chicken, pig and wolf.
- Added additional unit tests for texture handling.
- Improved gradle build tasks.
### 6.5.0
- ⚠️ Removed jar-in-jar bundle approach for better mod compatibility and api capabilities.
- Fixed #627 scissor implementation for better compatibility with other mods.
- Fixed #625 lively animation issues when using rotated or moved model parts.
- Fixed default animation are canceled when using scaled model parts.
- Added better pose animation control with smart, default und none options.
### 6.4.1
- Fixed #626 screen switching logic for different NPC UUIDs, thanks to
Spawnbladefor the detailed
### 6.4.0
- Fixed #626 by improving dialog data validation and error handling.
- Fixed #623 by refactoring render data and render handling.
- Fixed #622 by making sure custom data are properly saved and loaded.
- Fixed open dialog action type to allow opening dialogs from other NPCs.
- Fixed hashing issues by adding missing equals and hashCode methods for ConditionDataSet and
- Added custom data test item for #622 and easier testing of custom data.
- Improved records and fixed potential issues with missing data.
### 6.3.0
- Refactored config ui specific components and removed them from the core mod.
- Fixed dialog data by filtering dialog data before sending to the client.
- Fixed dialog editor layout issues and improved usability.
- Fixed missing default values for some dialog data fields.
- Added dialog priority support to control the order of dialog execution.
- Added condition support for dialog and scoreboard actions.
- Added frequency support for dialog to limit how often an dialog can be shown.
- Added new NPC preset to for scoreboard and condition support.
- Improved dialog button data format by removing redundant fields.
### 6.2.0
- Fixed legacy custom name parsing.
- Fixed string injection within dialogs.
- Fixed missing translation for action types.
- Added scoreboard action type to increase, decrease, set scoreboard values.
- Added
@score(...)NPC macro to display scoreboard values in the dialog. - Added additional unit tests.
- Improved spin button with indicators and better usability.
### 6.1.2
- Fixed container and menu sync issues with missing close container packets.
- Fixed close button not working in some cases.
- Fixed jumping mouse cursor between screen transitions.
- Fixed translation files and removed duplicate and deprecated entries.
- Moved Easy NPC wand to existing core item tab instead of creating a new one.
- Added cat pose support for different model parts (except tail).
- Improved EasyNPCWand glowing effect performance by disabling it when not needed.
- Improved custom entity detection by excluding non-living entities like displays, makers, throwns
- Improved cat variant handling.
### 6.1.1
- Fixed #615 by checking if item is equipped in one of the hands.
- Fixed #612 by re-validating entity types.
- Fixed #610 by force sync of hat and head layers for specific models.
- Fixed orc textures.
- Fixed cat variant handling for 1.21.5.
- Fixed player render by adjusting render state
skinfield. - Fixed cat renderer by adjusting render state
texturefield. - Fixed position, scaling and rotation preview.
- Fixed Fairy model.
- Improved custom model support and performance, by moving related logic into to client side only.
- Improved caching of player to UUID mappings for player skins.
- Limited change model commands and logic to Doppler NPCs only.
- Added renderEntityRaw method to render NPC as-it-is.
### 6.1.0 ✨
This is a major release. Please back up your worlds and NPC data before updating. This version
contains many improvements, optimizations, and internal changes that are **not fully compatible**
with earlier releases.
⚠️ Breaking changes
- Existing NPCs and their configuration data from versions before 6.1.0 may not load correctly or
- Internal data formats and some behaviors have been refactored to support new use-cases.
🧩 New modular structure
Easy NPC is now split into three separate mods:
- Easy NPC** – Bundle that includes both Core and Configuration UI for a plug‑and‑play experience.
- Easy NPC: Core** – Lightweight runtime and logic for NPCs, with minimal dependencies. Intended
- Easy NPC: Configuration UI** – Standalone configuration interface for creating and editing NPCs.
🎯 Why this change?
- Allows servers and modpacks to ship only the **Core** mod on the server side for a leaner setup.
- Reduces memory usage and load times when the UI is not required everywhere.
- Makes development and testing faster by separating UI and core logic.
[history]: https://github.com/MarkusBordihn/BOs-Easy-NPC/commits/
[upgrade_guide]: https://github.com/MarkusBordihn/BOs-Easy-NPC/wiki/Upgrading
## Note
This change log includes the summarized changes. For the full changelog, please go to
the [GitHub History][history] instead.
Note: Please always back up your world / NPCs before updating to a new version!
Check the [upgrade guide][upgrade_guide] for more information.
### 7.14.0
- Fixed #846 by keeping custom poses for players who start seeing the NPC later.
- Fixed attribute and trading settings missing for players who start seeing the NPC later.
- Fixed changed max uses, XP and trading type not shown in the trading screens until reload.
- Fixed
/easy_npc sound setchanges not reaching players until the NPC was reloaded. - Added game tests that check NPC poses and settings after respawns and for new players.
### 7.13.0
- Fixed color and formatting tags in dialog button names showing as plain text.
- Fixed the button preview in the editor showing lowercase names as a raw translation key.
- Fixed the "Move EasyNPC" item not working for NPC owners outside of creative mode.
- Fixed
/easy_npc owner setreporting success even when the owner could not be changed. - Fixed the game crashing when the URL or player skin screen showed a skin download error.
- Fixed the preset browser search showing no results after scrolling down the list.
- Changed the network protocol version, so client and server must run the same mod version.
- Added
@initiator,@npcand@score()support to dialog button names to fix #841. - Added automatic client tests with the Client Runtime Interface Toolkit.
- Larger core refactoring and code cleanup.
### 7.12.2
- Fixed the Fairy hitbox being far too small, so its name tag and speech bubble sat in its body.
- Fixed scaled NPCs keeping their old hitbox and eye level, so hits, clicks and looking missed.
- Fixed oversized names, lists and NPC data in network packets being read without any limit.
- Fixed invalid NPC positions, scales, attributes, names and durations from being applied.
- Changed Fairy NPCs to take up the space of their model, so they collide and can be clicked.
- Changed Skeleton, Stray and Bogged NPCs to the vanilla hitbox height, they were slightly short.
- Changed the network protocol version, so client and server must run the same mod version.
### 7.12.1
- Fixed #836 by always showing "Restore", including datapack presets, with a reason tooltip.
- Fixed preset import and export messages missing, wrong or not warning about replaced NPCs.
- Fixed the preset browser reloading on each keystroke, leaking NPCs and clearing the selection.
- Fixed selection box drop-down lists being covered by the checkboxes and labels behind them.
- Fixed the preset list sorting, filter order and layout clipping options in small windows.
- Fixed
/easy_npc preset import datawithout a position importing it as a default preset. - Fixed spawn rate limit leaks, unstable preset IDs and "Spawn New" stacking NPCs on one spot.
- Changed "Restore" to refuse instead of spawning a copy when it is not permitted.
- Added sorting, a match count, reload, auto-close, the NPC ID and tooltips for presets and skins.
- Added
matching <pattern>batch imports with limits, a confirmation and a clickable position.
### 7.12.0
- Fixed #833 by showing Easy NPC Wand outlines only to the wand holder, owner and admins.
- Fixed #834 by adding "Set Home Here" and "Reset Home" buttons to the position configuration.
- Fixed #835 by keeping the NPC ID and position in exported presets, so imports restore the same
- Fixed preset imports and spawn eggs losing the owner's list entry and owner objectives.
- Fixed NPCs restored from an automatic backup losing their owner and becoming ownerless.
- Fixed selection lists showing only their first six entries and hiding the rest.
- Changed importing a preset to update the original NPC at its stored position instead of adding a
- Changed completed trades to play the "Trade completed" sound, which stayed silent before.
- Changed the API dialog call to report an unknown dialog label instead of always reporting success.
- Changed NPCs without arms to carry held items at the head or body instead of hiding them.
- Changed the optional Easy Model Entities dependency to require version 2.4.0 or newer.
- Added a "Sound" configuration with sounds for dialogs, speech, swimming, eating and fall damage.
- Added a searchable sound selection with volume and pitch sliders to the "Sound" configuration.
- Added a "Block Vehicles" option to keep NPCs out of boats, minecarts and modded chairs.
- Added the profession selection to all skin configurations and a new built-in skin per NPC type.
- Added client settings to hide name tags behind walls and
highlightEnabledfor wand outlines. - Added an "Exists" condition operation and API access to NPC movement, actions and presets.
### 7.11.0
- Fixed #828 by no longer freezing the server on logout when NPCs follow or watch the player.
- Fixed #831 by moving routine NPC removal messages to the debug log.
- Fixed #832 by making humanoid NPCs ignore custom player models, animations and poses.
- Fixed hourly NPC backups stuttering on large worlds and retaining timestamps of removed NPCs.
- Fixed hourly NPC backups losing the identity, owner and position of the backed-up NPC.
- Fixed owner-login restoration duplicating, repeatedly restoring, reviving or moving unloaded NPCs.
- Fixed NPC index and file synchronization issues causing lost NPCs, crashes or false warnings.
- Fixed stale NPC data after unloading, avoided redundant writes and added repeated-unload warnings.
- Fixed the preset browser failing to list custom and world presets saved in the SNBT format.
- Fixed speech bubbles losing their text and turning translucent with Iris shaders.
- Fixed the "Opacity" of an NPC being ignored while a shader pack is active.
- Fixed text formatting and macro parsing for translated speech bubbles and mod API texts.
- Fixed speech bubbles and their text staying hidden behind blocks while a shader pack is active.
- Added
minLightLevelto keep speech bubbles readable in dark surroundings.
### 7.10.0
- Fixed #829 by allowing bats and other non-walking mobs as the render entity of a Doppler NPC.
- Fixed the Wandering Trader NPC rendering without its texture.
- Fixed NPCs rendered as a bat, frog or warden showing a static pose instead of their animation.
- Fixed the NPC name tag showing above the previews in the "Custom Models" configuration.
- Fixed speech bubbles being cut off by walls, doorframes and the NPC's own body.
- Fixed the previews in the "Custom Models" configuration.
- Changed the previews in the "Custom Models" configuration to stand on a common ground line.
- Changed overlapping speech bubbles to move apart and to stay visible when the NPC is off-screen.
- Changed "Navigation: Automatic" to use flying movement for NPCs rendered as a flying mob.
- Changed the render entity list to hide seats, paintings, thrown items and other non-mob entities.
- Added a "Min. hover height" slider for flying NPCs and client settings for speech bubbles.
### 7.9.0
- Fixed modded fish NPCs, like the ones of Tide 2, spinning around instead of swimming upright.
- Fixed "Navigation: Automatic" using ground movement for water NPCs and aquatic model NPCs.
- Fixed the "Random Swimming" objective never moving an NPC that uses aquatic navigation.
- Fixed a swimming NPC shaking or twitching in place instead of holding its tilt and swim depth.
- Fixed a swimming NPC turning in circles forever when it could not reach its next path point.
- Fixed an NPC that fell into water never getting out of it again.
- Fixed a following NPC searching a new path every tick while its target was unreachable.
- Fixed the "Move to" actions stopping short of a raised target or not starting while in the air.
- Fixed "Move back to Home" ignoring height differences and never returning from beyond 32 blocks.
- Fixed the "Opacity" input field being too narrow to show a value of 100.
- Fixed a damaged NPC with an Easy Model Entities model never flashing red.
- Changed modded water NPCs to swim level, vanilla water mobs keep their tilt as before.
- Changed the "Move to" actions to walk up to 48 blocks and to teleport only beyond that range.
- Changed "Move to" and "Move back to Home" to give up after three seconds without progress.
- Changed the timeout of a "Move to" action to count real ticks, it ran twice as long before.
- Changed a new "Random Swimming" objective to rank below following, fleeing and attack goals.
- Changed "Opacity" of an NPC with an Easy Model Entities model to be applied by that mod itself.
- Changed the minimum Easy Model Entities version to 2.3.0, older versions disable the integration.
- Added "Depth below surface" and "Height above floor" sliders for the swim level of an NPC.
- Added log entries for the NPC files written on a world save, with a warning above 250 ms each.
### 7.8.1
- Fixed #827 by rendering fish NPCs in water upright instead of always flopping on their side.
- Fixed #828 by keeping a damaged NPC from blocking the world save, it now falls back to defaults.
- Fixed a restored NPC picking up a random preset ID that changed with every save.
- Changed NPC data to only be written to disk when it actually changed.
### 7.8.0
- Fixed smaller text and UI issues.
- Changed an NPC that is already standing at its target position to finish the movement right away.
- Changed the "None" skin tab to "Advanced", which now holds "Disable Skin" and the texture field.
- Changed the minimum Easy Model Entities version to 2.2.0, older versions are no longer accepted.
- Added a "Move to" action, which sends an NPC to a position, a player, its owner or its home.
- Added a "Move to and Wait" action, which runs the following actions only after the arrival.
- Added an arrival radius, a timeout and an optional teleport to both move actions.
- Added an "Opacity" attribute from 0 to 100, which fades body, armor and hand items together.
- Added a "Set Opacity" action, which turns an NPC into a ghost or hides it completely.
- Added the "Lantern Wraith" preset, a ghost walking a square with a short line at every corner.
- Added API access to the move actions and the opacity of an NPC.
- Added a "Resource Location" skin type, which renders any texture of a mod or a resource pack.
- Added an "Advanced" skin tab, which previews the NPC with the entered texture before applying it.
### 7.7.7
- Fixed #821 by keeping the transparency of 64x64 skins, which Fresh Moves needs for its eyes. Skins
- Fixed #818 by running trade actions for Villager and Wandering Trader NPCs as well.
- Fixed a dialog with several text variants switching its speech bubble size every second.
- Fixed the skin cache storing the processed image instead of the original download.
- Fixed the untranslated interval names, like
PER_DAY, of the "Execution Limit" condition. - Fixed the
sitanimation of Easy Model NPCs, which never used the built-in sitting pose. - Fixed the speech bubble being cut off by the head of an NPC when a player stood close to it.
- Changed speech bubbles to keep their screen size and to move down or aside when a player is close.
- Changed the speech bubble text to render 20% larger than a name tag.
- Changed a time based action set with a "Wait" action to run in order instead of picking one entry.
- Changed dialog texts to wrap later, so an existing dialog can switch to the wider screen layout.
- Changed fallback actions to skip screen actions without a player, like the regular actions do.
- Changed the minimum Easy Model Entities version to 2.1.0, older versions disable the integration.
- Added a "Wait" action, which pauses the following actions of an event for a chosen duration.
- Added the "Countdown Timekeeper" preset, a speech bubble count to ten ending in sound and sparks.
- Added scaling and rotation for Doppler NPCs behind the "Experimental Features" checkbox. Both only
- Added a "Sound" action, which plays a sound at the NPC with sound category, volume and pitch.
- Added "Every 5 Minutes" and "Every 15 Minutes" to the "Execution Limit" condition.
- Added a "Player Idle" condition, which checks how long a player has not moved.
- Added an "Immovable" attribute, which keeps an NPC in place against pushing and knockback.
- Added
/easy_npc pauseto pause a single NPC or all NPCs; the global pause ends with the server. - Added API access to the sound action, the pause state and the idle time of a player.
- Added a texture override per model slot for Easy Model NPCs over
/easy_npc render texture. - Added a "Repeat" playback mode with a count and a time limit to the "Play Animation" action.
- Added API access to animation variants, texture slots and textures of Easy Model NPCs.
### 7.6.0
- Fixed unclear mod conflict errors for duplicate entity data tracker IDs.
- Fixed third-party health bars rendering over NPC previews in configuration and dialog screens.
- Fixed Doppler and Easy Model Entities NPCs using default hitboxes instead of their model size.
- Fixed the
/easy_npccommands suggesting no NPC UUIDs at all on a server. - Fixed the pose list of the "Set Pose" action drawing over its input field.
- Fixed the untranslated "Loop", "After current" and "Action Data Type" labels of the action editor.
- Fixed the missing hint text of the "Chance" condition.
- Fixed long condition hints running out of the editor screen instead of wrapping.
- Fixed the misaligned help icons and text buttons of the "Message" action.
- Fixed changes to the "Set Pose", "Play Animation" and "Stop Animation" actions not being saveable.
- Fixed the speech bubble text sitting closer to its upper border than to its lower one.
- Changed the NPC suggestions to list the crosshair NPC first and only own NPCs without permissions.
- Changed a preset export to only store what differs from a new NPC, without position or owner.
- Changed a preset without objectives or actions to fall back to the defaults of its NPC type.
- Changed events without a player, like "On Spawn" or "On Kill", to check their conditions. An
- Changed a time based action to pick the owner as
@initiatorwhenever the owner is nearby. - Changed speech bubbles to stay visible from 5 up to 18 seconds, depending on the text length.
- Changed the "Set Pose" action to only show its input field for the "custom" pose entry.
- Added time based actions on five fixed steps, from every ~1 second up to every ~15 minutes.
- Added a "Message" action for chat, system message and speech bubble text without a command.
- Added text variants, a sender name, a recipient and translation keys to the "Message" action.
- Added the speech bubble graphic as
easy_npc:textures/gui/speech_bubble.pngfor resource packs. - Added a "Chance" condition in percent and a "Relationship" condition for owner and faction.
- Added spawn, owner login, state change, day / night, weather and the missing "On Trade" events.
- Added a base preset per NPC type under
easy_npc:api/preset/base/, usable as a parent preset. - Added the "Wandering Companion" preset, a talkative NPC built from time based messages.
- Added an action registry, an action handler, a preset validator and richer event data for mods.
- Added a tooltip with name, type and distance to every NPC suggestion of the
/easy_npccommands. - Improved the NPC suggestions, which appear without typing and tolerate a near miss of one block.
### 7.5.0
- Fixed #814 by giving every Cobblemon NPC its own animation state instead of one per species.
- Fixed #813 by letting "Move back to Home" work at any distance instead of only near its home.
- Fixed #812 by checking once per session whether a player changed their skin.
- Fixed #810 by accepting Cobblemon aspects of resource packs instead of only "shiny" and "female".
- Fixed the home position of an NPC always reading as unset, which hid "Home" in the configuration
- Fixed NPCs spawned from a preset, the preset browser or a respawn never getting a home position.
- Fixed an NPC spawned from the preset browser keeping the home position of the world the preset was
- Fixed NPCs being drawn as a white silhouette with a shadow in the configuration, skin and preset
- Fixed the server crashing when an NPC with a "Tempt" objective ticked its goals.
- Fixed a single or boss spawner spawning without any limit when its preset carried no stored NPC.
- Fixed the "Legacy Easy NPC Data" warning appearing for newly created NPCs.
- Fixed missing transparency corrections for old 64x32 skins, which showed layer artifacts.
- Fixed the player skin screen freezing for a moment while a player name was looked up.
- Fixed the "Reset look at ..." objective label, which read "Reset loot at ..." in some languages.
- Fixed the "No Gravity" attribute being ignored after a preset import, which let NPCs fall.
- Fixed the Fabric game tests, which crashed on start because of the development helper mods.
- Fixed NPCs losing their owner when they were spawned again after a despawn.
- Fixed objectives being deleted from an NPC when the mod providing them was missing at start.
- Fixed importing a preset without a stored id, which spawned an NPC without owner and home.
- Fixed "Follow owner" and "Look at owner" keeping their old target after the owner was changed.
- Fixed attack targets staying assigned to an NPC after the targeted entity was gone.
- Fixed the "Look at Item" objective, which could be stored but never did anything.
- Fixed walking animation for Doppler NPC and 3rd party models.
- Fixed Forge never running its server start-up step, which left NPC tracking, factions and the
- Fixed Forge development runs starting without any mixins, which disabled the vanilla entity
- Changed the movement objectives to a fixed order: flee, follow, return home, then stroll. NPCs
- Changed inserting a preset into a vanilla monster spawner to keep its delay, count and range.
- Changed "Follow owner" and "Look at owner" without a chosen target to follow the owner of the NPC.
- Changed datapack presets to
easy_npc/preset/, the old folder still works, but only for easy_npc. - Changed the preset browser to always list its entries in the same order.
- Removed the experimental user-defined NPCs; the extra config file is no longer read or created.
- Removed the unused
SERVER_SKINskin type. - Added a new game test structure to support game tests in 1.21.11 and higher.
- Added a reload button to each entry of the player skin screen, to fetch a single skin again.
- Added the reason to the log whenever an NPC is removed, so an unexpected despawn can be traced.
- Added suggestions to
/easy_npc render set species. - Added support for presets from other mods, which no longer have to use the
easy_npcnamespace. - Added a preset visibility that hides a preset from the preset browser and the NPC screens.
- Added a teleport distance and a resting spot offset to the follow objectives.
- Added item tags, a "can be scared" option and a "only without owner" option to "Follow item".
- Added an item field to the look objectives, so an NPC can watch a chosen dropped item.
- Added an identifier per NPC, so a mod can find its own NPCs again.
- Added an option to spawn an NPC again when its owner logs in.
- Added game tests for NeoForge, which had none, and restored the spawn egg, dialog screen, data
- Added game tests for every configuration and editor screen, covering all three mod loaders.
- Added game tests for the home position, covering the spawn default, the stored value and
- Improved the model name parsing, which mistook a species ending in "_shiny" for a variant.
- Improved following of flying NPCs, which now steer directly when there is no path through the air.
- Improved third party support with an API for presets, own objectives and objective configuration.
### 7.4.0
- Fixed #807 by no longer pulling every same-type NPC within 32 blocks into a "Defend Self" fight.
- Fixed #805 by evaluating all visibility settings together instead of stopping at the first one.
- Fixed #804 by keeping the custom name on Doppler NPCs for name based textures and the name tag.
- Fixed #803 by adjusting assets to match typical Minecraft style instead of generic UI style.
- Fixed the day and night detection, which counted sunrise as night and sunset as day.
- Fixed the visibility in the Nether and the End, which used the Overworld time.
- Fixed the time and game mode visibility checkboxes appearing in a random order.
- Fixed game tests only being able to fail on their first assertion, which hid later failures.
- Fixed the "Saddled" horse skin variants, which never showed a saddle.
- Changed "Visible to Owner" and "Visible to Team" to also follow day, night and game mode.
- Changed Evoker, Illusioner and Vindicator variants without "Crossed Arms" to keep their arms down.
- Added a "Defend Faction" objective that attacks whoever hurt a nearby faction member or player.
- Added a system message when faction members fight each other and the faction stays out of it.
- Added a head equipment slot for Illagers so their captain banner can be removed or swapped.
- Added a day and night preview to the display configuration screen.
- Added unit and game tests for the visibility attributes and the faction defense.
- Improved the visibility check performance by reading the display attributes only once per check.
- Improved display attributes from older versions by completing them with their defaults.
- Improved the attack objective screen by disabling "Protect Owner" and "Defend Faction" when unset.
### 7.3.0
- Improved skin variants by carrying their data as typed fields instead of parsing variant names.
- Centralized the Cobblemon mod id and default model on shared constants.
- Reduced duplicated enum code with a shared
EnumUtilshelper forget(String)lookups. - Optimized villager profession and type lookups to use direct registry keys instead of scans.
- Optimized enum name lookups by caching tag names, ids and keys once at construction.
- Added unit and game tests for skin variants, villager resolution and the enum helper.
### 7.1.2
- Fixed #801 by using combination for NPC, Dialog and Action UUIDs to avoid collisions for action
### 7.1.1
- Fixed #800 by lazy loading entity types.
- Fixed #799 by fixing edge cases and adding additional documentation and better log messages.
- Fixed #798 by considering console, commands and command blocks as trusted command sources.
- Fixed a critical single-player / LAN issue where client and server NPCs shared the same registry.
- Fixed a memory leak in the configuration menu handling and added timeout and disconnect cleanup.
- Fixed duplicate downloads when several NPCs request the same skin at the same time.
- Fixed skin lookups failing after a error so a slow server no longer freezes the game.
- Fixed the URL skin screen freezing the game while checking a remote image; the check now runs in
- Added a new World Spawner block that limits an NPC preset across the whole world (all dimensions),
- Hardened remote skin downloads with a strict size limit and safe redirect handling to prevent
blockPrivateAddresses setting.- Improved server performance by only sending entity and player load events to NPCs that actually
### 7.0.0
- Fixed #794 by using the expected type for NPC rendering.
- Fixed scaling screen preview by pinning the entity feet to the 0 line of the scale ruler, so NPCs
box updates.
- Fixed #791 by adding Wandering Trader NPC type.
- Fixed #788 by extending the AI safeguards to Epic Fight and raw NPC variants (Piglin, Villager,
- Fixed #787, #531, #237 and #184 by adding a faction system with
/easy_npc factioncommands,
- Fixed #787, #771 and #572 by adding a new
targetobjectives tab to attack hostile factions or
- Fixed #786 by adding gender and shiny model variants for Cobblemon NPCs, searchable via
female
shiny in the model selection.- Fixed faction combat between invulnerable NPCs by adding the new
Attackable by Factionscombat
- Fixed Cobblemon model selection previews for oversized species by scaling with Cobblemon's own
- Fixed faction management edge cases by validating faction names, sorting faction lists and
- Fixed custom skin reloads by loading and clearing texture caches per skin model instead of always
- Improved the
Attackable by Players/Monsters/Factionscombat attributes to work independently of
Invulnerable, each opening a targeted hole for its own attacker group.- Improved preset command and network handling by splitting the large handlers into smaller focused
- Added Easy Model Entities Support.
- Added faction manager and faction editor screens to create, color and delete factions and manage
FACTION_MANAGEMENT security feature.- Added new
Miscattributes tab as home for the NPC faction assignment. - Added reusable warning and help icon components for inline hints with tooltips.
- Added additional unit and game tests for factions, target objectives and Cobblemon model variants.
### 6.25.0
- Fixed #782, #636, #622 by preserving data components during validations.
- Fixed #780 by caching remote texture downloads and reducing duplicate registrations.
- Fixed #767 by clamping attribute sliders against extreme values from other mods.
- Fixed #754 by adding custom data item matching for NPCs with actions and conditions.
- Fixed texture manager running in the wrong thread may cause crashes and deadlocks in >= 1.21.x.
- Fixed empty UUID handling for action conditions.
- Fixed execution limit reset for actions.
- Added texture registration queue to avoid multiple simultaneous downloads in the same tick.
- Added NPC coin, key and red token as consumable items for NPCs with actions and conditions.
- Added
Welcome Coin Traderas example NPC preset with custom coin, key and red token item data. - Added attribute safeguards against extreme values from other mods.
- Increased fallback max health value from 1024 to 4096 for high-health NPCs.
- Improved texture manager by reducing duplicate texture checks and registrations.
### 6.24.0
- Fixed #459, #775 by adding an option to block interactions with invisible NPCs.
- Fixed #774 startup crash related to optional Epic Fight and Cobblemon entity type maps.
- Fixed #773 by checking timed trade resets during base ticks and before opening trade screens.
- Fixed trade reset timing by increasing internal tickers correctly.
- Added time of day and weather conditions for #459.
- Added additional unit and game tests for trade resets, ticker handling and entity attributes.
- Added
Skywatch Scoutas example NPC preset with time of day and weather conditions.
### 6.23.0
- Fixed #774 by migrating isSunBurnTick error to 26.x.
- Fixed #772 by adjusting texture retries with 403 and 404 errors and lowering logging.
- Fixed #770 item rendering for Epic Fight NPCs (Evoker, Pillager, Vindicator and humanoid skins).
- Fixed #769 door loops with NPCs not reliably opening or closing doors.
- Fixed #760 by adding a dialog option and config setting (buttonConditionMode: LOCK or HIDE) to
- Fixed #709 by adding color picker popup for names with 32 colors and/or a manual RGB/hex value.
- Fixed NPC name color being reset when renaming without a specified color by preserving the
- Improved the door movement attributes so "Pass Door" is automatically enabled while "Open Door"
### 6.22.0
- Fixed #766 by passing the full server player context to command execution for better compatibility
- Fixed #764 by adding entity health, npc health conditions and NPC preset
Grukk, the Sparring Post as example for using these conditions.- Fixed #763 by making sure dialog button execution limits are now recorded.
- Fixed #758 by providing a example NPC preset named
One Wish Companion. - Fixed crashes related to 3rd party villager AI reading non-registered brain memories on Easy NPC
- Fixed Dialog buttons are not locked for server-side data as preparation for #760 and #644.
- Fixed #628 by adding conditional dialog opening support / command for better control over when
- Added brain AI for Piglin and Piglin Brute NPCs and registered the full vanilla brain memory set.
- Added additional guns to the gun tag for #757.
- Added a new "Open Dialog (Conditional)" action that opens a named dialog only if its conditions
- Added new entity health and npc health conditions for actions, dialogs and dialogs buttons.
- Added Piglin, Piglin Brute and Zombified Piglin NPCs invulnerable, for consistency with other
- Added a new "Knockback Immunity" combat attribute that prevents the NPC from being knocked back by
- Added a new "Explosion Immunity" combat attribute that makes the NPC immune to explosion damage
- Moved the "Projectile Collision" attribute to the Combat attribute screen, where it fits better
### 6.21.0
- Fixed item attachment for Illagers in crossed-arms pose.
- Fixed broken illager crossbow attack goal.
- Fixed crashes related to 3rd party items which are not renderable as hand items #756.
- Fixed crashes related to 3rd party mixins trying to access non-existing model parts #756.
- Fixed log.info spam message by reducing log verbosity and adding additional checks for custom
- Improved EasyNPCModelManager performance.
- Refactored NPC renderers to remove default hand item layer.
### 6.20.0
- Fixed crashes related to 3rd mods trying to access non-existing NPCs goals.
### 6.19.0
Note: This update adjusted the dialog background images by 10x6 pixels, which may require users to
adjust their custom dialog backgrounds if they are using custom ones.
- Fixed #752, #130 by adding dialog button condition support to allow to disable buttons.
- Fixed #683, #215 by adding typewriter effect support for dialog text.
- Fixed #690, #309 by allowing conditions for dialog, dialog buttons and interactions.
- Fixed smaller UI issues with dialog screen layout and background.
- Refactored dialog background images by 10x6 pixels on each side.
- Refactored dialog screen layout to better fit the new background size and improve appearance.
- Added typewriter effect and client configuration for dialog text.
- Added condition symbols to indicate the condition status for dialog, buttons and interactions.
- Added amount field for item conditions to allow checking for specific amounts of items.
- Added
Threshold Wardenas example NPC preset with various conditions and actions. - Added smaller bug fixes and optimizations related to dialog conditions and button states.
### 6.18.0
Note: This update changes the internal data format for conditions and actions, which may reset /
remove legacy existing execution-limit entries without stored IDs.
- Fixed #745 by adding conditions for actions to allow more complex and dynamic behavior.
- Fixed #652 by adding dialog button tooltip for longer texts.
- Fixed #687 by adding command value tooltip to show the full value.
- Added Experience Level conditions.
- Added Game-mode conditions.
- Added has item in inventory condition.
- Added has item in hand condition with (main hand and off-hand) support.
- Added player health condition.
- Added player tag condition.
- Added player team condition.
- Added Goldmere example NPC preset with various conditions and actions.
- Added negative condition support to allow negating conditions for more complex logic.
- Removed parameter pseudo IDs for
ActionDataEntryand replaced them with random UUIDs. - Refactored condition system to allow more condition types.
### 6.17.0
- Fixed #738 by adding additional tooltips for "Execute as player"
- Fixed to detailed logs by reducing log.info messages during startup and in-game.
- Added additional unit and game-tests.
### 6.16.0
- Fixed #732 by providing option to disable ESC key and close button for dialogs.
- Fixed #723 by avoid auto-close in specific cases like trading screens.
- Added general dialog configuration options to allow users to customize dialog behavior.
- Added avatar scaling and position offset options for dialogs.
- Added missing translation keys.
### 6.15.1
- Fixed #735 by extending the correct base class.
- Fixed several 26.1.2 specific issues from manual spawn testing.
### 6.15.0 (Trades, Player Heads, Epic Fight and QOL updates)
- Fixed #731 by resyncing species data, if species list is empty on the client.
- Fixed #730 by improving Epic Fight integration and enabled experimental features.
- Fixed #729 by making sure trade uses are stored correctly.
- Fixed #728 by adding custom head support for player heads.
- Fixed #689 by showing remaining trade uses and allow resetting manually and automatically.
- Fixed #218 and #132 with new trade configuration screen and better support for custom trades.
- Fixed trade specific edge by switching between basic and normal/advanced trading mode.
- Fixed dialog button text is truncated with tooltip showing the full text.
- Fixed Cobblemon animation issues by syncing animation state with Cobblemon Animation System.
- Added per trade specific actions to allow users triggering actions after buys.
- Added trade reset button to reset all trades easily.
- Added trade usage information to trade configuration screen.
- Added experimental feature state to allow users to manually enable experimental features.
- Added Griselda Grindstone as example trader with actions.
- Cleanup test files.
### 6.14.0
- Fixed #727 by making sure changes are synced to the client when changing values.
- Fixed #726 by adding additional allow lists for specific commands.
- Fixed #686, #389, #304, #211 by adding basic Cobblemon support with Cobblemon NPC.
- Fixed dialog misalignment and navigation issues by adjusting dialog sprites and screens.
- Fixed x and z root rotation by correcting rotation logic and pivot calculations.
- Added basic Cobblemon support with custom NPC type and model for testing.
### 6.13.0 (Security and Permissions Updates)
Notes: This update includes better security checks and permissions for multiplayer environments. It
allows to execute server commands which can be potentially dangerous if used with malicious intent.
- The update splits the model root data and logic from the rest of the model part data and logic,
- Fixed #725 by separating model root data and logic from the rest of the model part data and logic.
- Fixed #722 by supporting .sbnt files as local presets.
- Fixed #675 by adding dedicated assets for dialog and config screen backgrounds.
- Fixed #605, #532, #529 with new security checks and permissions system.
- Fixed #469, #311 by adding experimental api documentation and examples for custom model support.
- Fixed double rendering of config screen background by removing redundant background rendering.
- Fixed Ghast and Slime hitbox and name tag position issues by adjusting bounding box.
- ⚠️ Added security checks to prevent potential exploits and allow safe usage in multiplayer
- Replaced dynamic dialog screen background with a static one for better performance, customization
- Replaced dynamic config screen background with a static one for better performance.
- Refactored config-ui specific components and removed them from the core mod.
- Removed duplicated sprite sheets.
- Prepare permission system for possible Luck Perms integration in the future like #712.
- General code cleanup and optimizations related to config screen rendering and assets.
### 6.12.0
- Fixed #714 by adding additional checks for custom model part list based on vanilla models.
- Fixed #713 by reducing log verbosity with downgraded per-NPC INFO messages to DEBUG and
- Fixed #711 by reduced oversized startup/config log output.
- Fixed NBT validation guard to prevent unnecessary buffer allocations in production.
- Added model part name constants to EasyNPCModelManager for consistent usage across mixins.
- Improved RenderEntityTypeSupportConfig by enhancing filter logic and optimizing data structures
- Removed verbose debug logs that dump large data structures.
### 6.11.1
- Fixed #710 by improving backward-compatible parsing for recoverable trade data.
### 6.11.0
- Fixed #703 rendering issue with new custom layer system and hand renderings.
- Fixed #701 by adding additional safeguards and logging for invalid trading offers.
- Fixed smart animation not working properly with modified head position.
- Fixed head tracking by moving player detection back to server side-only.
- Fixed CustomLookAtPlayerGoal to better handle edge cases and reduce jitter.
- Fixed issue with Doppler NPCs keeping their hand inventory.
- Improved PoseManager logging message.
- Updated logo with a new design.
### 6.10.0
- Fixed #698 by adding try and catch for 3rd party entity creation.
- Fixed #695 by clearing model part rotations/positions when switching to a
DEFAULTvanilla pose. - Fixed #695 by applying lock rotation and pose animation only when the NPC is idle.
- Fixed #695 by correcting root rotation pivot to use actual bounding box height instead of 0.5f.
- Fixed multiple objective registration issues including inverted
isTargetedPlayercheck, wrong
targets.
- Fixed goal reference being retained after objective is unregistered.
- Removed auto-lock of ROOT rotation when loading poses; root lock is now user-controlled.
- Added lock rotation checkbox to the advanced and custom pose configuration screens.
- Added model-specific pose key filtering in
ConfigurationMenuHandlerfor the default pose screen. - Added unit tests for
CustomPosition,CustomRotation,CustomScale,ModelPose,
ModelAnimationBehavior and ModelAnimationData.- Added
NPCDataIsolationTestHelperand game tests for Fabric and Forge. - Increased max head yaw range from 60° to 65°.
### 6.9.0
- Fixed #692, #666 by adding caching and safeguards to prevent redundant retriggering of NPC entity
- Fixed #651, #617 by adding basic custom poses for all supported NPC types.
- Fixed #597 by adding additional Flee goals for fleeing from players, villagers, monsters, ...
- Fixed pose loading to read directly from mod resources instead of copying files to disk.
- Fixed duplicate
saveNPCcalls on entity join by checking existing registry entry first. - Added
despawnandspawncommands to remove and re-spawn NPCs by UUID with configurable removal
- Added
ModelPoseAPIandEasyNPCEntityHandlerpublic API classes for controlling NPC poses and
- Added pose data files for all supported NPC types.
- Added lock rotation checkbox to the basic pose configuration screen.
- Added
MoveToPositionGoalto move an NPC to a position before executing a callback action. - Added
EasyNPCLookControlandEasyNPCBodyRotationControlto respect locked root rotation. - Added synced owner change and dimension change to the NPC entity data index.
- Added EasyNPCItemAttachmentLayer into various entity renderers.
- Added dedicated
Flee Objectiveconfiguration tab with objectives for fleeing creepers, monsters,
- Added
FOLLOW_ITEMobjective to the follow objectives tab to make NPCs follow item entities by
minecraft:apple).- Added
LookAtEntityByUUIDGoaland enabled the look-at-entity-by-UUID and look-at-owner objectives
- Added
persistentflag toSynchedDataIndexso that transient indices (e.g. crossbow charge,
- Added configurable
customParticlesEnabledflag toSlimeBasefor API consumers. - Added
SoundType.PETand mappedCAT_PURRto the cat NPC for tamed ambient sound variety. - Reduced log verbosity for periodic NPC save operations from INFO to DEBUG.
### 6.8.3
- Fixed #680 by enforcing version miss-match by upgrading network protocol version.
- Fixed #679 by resetting position, rotation and size for name tag.
- Fixed #665 by adding multi state slide for root rotations.
- Fixed #664 by adding option to disable following mouse cursor for easier posing.
- Fixed #663 by improve support for X and Z root rotations.
- Fixed #661 by adding quick rotation with NPC wand and sneaking to the NPC to rotate the root to
- Fixed move tool is wrongly triggering interactions by adding check for move tool in interaction
- Fixed Preset Item is wrongly triggering interactions by adding check for preset item in
- Fixed Slime and Ghast hitbox and name tag position issues by adjusting bounding box and eye height
- Fixed Slime and Ghast GUI position by adjusting offset values.
### 6.8.2
- Fixed #677 by extending
SafeMerchantDatawith notifyTrade to avoid crashes. - Added progression data support for leveling up NPCs based on player interactions and actions.
- Added global NPC tracking system for better management and debugging of NPCs across the world.
- Added
OriginalModelConfig.withVariantTexture()option to allow using variant textures with the
### 6.8.1
- Fixed #676 by using existing preset helper method instead of custom one.
### 6.8.0 (Adding API support)
- Fixed #667 by adding warning messages and additional checks for invalid network packets.
- Fixed Horse spawn eggs model.
- Fixed pose support for allay, chicken, creeper, fox, ghast, horse, illager, iron golem, slime and
- Added NPC base classes for better API support.
- Added NPC raw classes for advanced API support.
- Added Slim and Ghast NPC types.
- Added Custom Model API for easier integration with other mods and custom models.
- Refactored internal data handling and registration for better maintainability and future
### 6.7.1
- Fixed #657 and #656 by adding additional client side checks for vanilla bug.
### 6.7.0
- Fixed #650 by implementing Wolf Leg Animations in setupAnim method.
- Fixed #648 by fixing canBeHitByProjectiles translation.
- Fixed #645 by adding
allowBypassInvulnerabilityconfig option to allow/deny bypassing
- Fixed delete button showing label even with small width.
- Fixed up and down buttons not positioned correctly in some cases.
- Fixed name tag showing up for dialog and configuration UI.
- Fixed distance action issue were multiple actions are not properly triggered.
- Fixed issues with NPC presets.
- Fixed Cat NPC and Wolf NPC owner data not syncing properly.
- Added preset browser for easier selection of common NPC presets.
- Added preset .snbt (text) export and import functionality for sharing NPC presets.
- Refactored existing NPC presets to use new .snbt format.
- Refactored spawner system to use new preset format for better maintainability and future
### 6.6.2
- Fixed #643 by rework scaling system.
- Fixed scaling not properly updating hitbox and nametag position after restart / reload.
- Added MID and MOUSE_OVER name tag visibility modes for finer control over NPC name display.
- Added team-based name tag visibility support respecting vanilla Team.
### 6.6.1
- Fixed #638 by refactored internal data handling for display attributes.
### 6.6.0
- Fixed #634 by implementing asynchronous texture loading with dedicated thread pool.
- Fixed texture loading blocking render thread causing game freezes.
- Fixed race conditions in texture reload protection using atomic operations.
- Fixed resource leaks in HTTP connections during remote texture downloads.
- Fixed URL validation spam allowing multiple simultaneous downloads of the same texture.
- Fixed exception handling for remote image validation preventing crashes on invalid URLs.
- Fixed
defineId called for:warning messages during NPC loading. - Refactored texture loading architecture with multi-level defense and rate limiting.
- Refactored entity data registration logic for better maintainability.
- Converted data classes to modern Java records for better immutability and thread-safety.
- Added thread-safe session server spam protection with ConcurrentHashMap.
- Added comprehensive error recovery with automatic cooldown reset on failures.
- Improved texture loading with 2-thread pool and 500ms rate limiting.
- Improved exception handling with specific catch blocks for IIOException and FileNotFoundException.
### 6.5.2
- Fixed Villager profession and job skin issue.
- Improved GitHub workflows by adding cache for gradle dependencies.
- Improved Gradle build time and cleanup tasks.
### 6.5.1
- Fixed #632 by implementing ON_KILL action type and event.
- Fixed #629 by improving texture handling performance, caching, and memory usage.
- Fixed kill command is not working on NPCs.
- Fixed texture reload protection preventing cache reload after eviction.
- Fixed WebP validation bug in remote image validator (missing return statement).
- Refactored texture handling logic for better maintainability and future improvements.
- Added time-based reload protection (60 seconds) to replace permanent blocking mechanism.
- Added missing variant textures for chicken, pig and wolf.
- Added additional unit tests for texture handling.
- Improved gradle build tasks.
### 6.5.0
- ⚠️ Removed jar-in-jar bundle approach for better mod compatibility and api capabilities.
- Fixed #627 scissor implementation for better compatibility with other mods.
- Fixed #625 lively animation issues when using rotated or moved model parts.
- Fixed default animation are canceled when using scaled model parts.
- Added better pose animation control with smart, default und none options.
### 6.4.1
- Fixed #626 screen switching logic for different NPC UUIDs, thanks to
Spawnbladefor the detailed
### 6.4.0
- Fixed #626 by improving dialog data validation and error handling.
- Fixed #623 by refactoring render data and render handling.
- Fixed #622 by making sure custom data are properly saved and loaded.
- Fixed open dialog action type to allow opening dialogs from other NPCs.
- Fixed hashing issues by adding missing equals and hashCode methods for ConditionDataSet and
- Added custom data test item for #622 and easier testing of custom data.
- Improved records and fixed potential issues with missing data.
### 6.3.0
- Refactored config ui specific components and removed them from the core mod.
- Fixed dialog data by filtering dialog data before sending to the client.
- Fixed dialog editor layout issues and improved usability.
- Fixed missing default values for some dialog data fields.
- Added dialog priority support to control the order of dialog execution.
- Added condition support for dialog and scoreboard actions.
- Added frequency support for dialog to limit how often an dialog can be shown.
- Added new NPC preset to for scoreboard and condition support.
- Improved dialog button data format by removing redundant fields.
### 6.2.0
- Fixed legacy custom name parsing.
- Fixed string injection within dialogs.
- Fixed missing translation for action types.
- Added scoreboard action type to increase, decrease, set scoreboard values.
- Added
@score(...)NPC macro to display scoreboard values in the dialog. - Added additional unit tests.
- Improved spin button with indicators and better usability.
### 6.1.2
- Fixed container and menu sync issues with missing close container packets.
- Fixed close button not working in some cases.
- Fixed jumping mouse cursor between screen transitions.
- Fixed translation files and removed duplicate and deprecated entries.
- Moved Easy NPC wand to existing core item tab instead of creating a new one.
- Added cat pose support for different model parts (except tail).
- Improved EasyNPCWand glowing effect performance by disabling it when not needed.
- Improved custom entity detection by excluding non-living entities like displays, makers, throwns
- Improved cat variant handling.
### 6.1.1
- Fixed #615 by checking if item is equipped in one of the hands.
- Fixed #612 by re-validating entity types.
- Fixed #610 by force sync of hat and head layers for specific models.
- Fixed orc textures.
- Fixed cat variant handling for 1.21.5.
- Fixed player render by adjusting render state
skinfield. - Fixed cat renderer by adjusting render state
texturefield. - Fixed position, scaling and rotation preview.
- Fixed Fairy model.
- Improved custom model support and performance, by moving related logic into to client side only.
- Improved caching of player to UUID mappings for player skins.
- Limited change model commands and logic to Doppler NPCs only.
- Added renderEntityRaw method to render NPC as-it-is.
### 6.1.0 ✨
This is a major release. Please back up your worlds and NPC data before updating. This version
contains many improvements, optimizations, and internal changes that are **not fully compatible**
with earlier releases.
⚠️ Breaking changes
- Existing NPCs and their configuration data from versions before 6.1.0 may not load correctly or
- Internal data formats and some behaviors have been refactored to support new use-cases.
🧩 New modular structure
Easy NPC is now split into three separate mods:
- Easy NPC** – Bundle that includes both Core and Configuration UI for a plug‑and‑play experience.
- Easy NPC: Core** – Lightweight runtime and logic for NPCs, with minimal dependencies. Intended
- Easy NPC: Configuration UI** – Standalone configuration interface for creating and editing NPCs.
🎯 Why this change?
- Allows servers and modpacks to ship only the **Core** mod on the server side for a leaner setup.
- Reduces memory usage and load times when the UI is not required everywhere.
- Makes development and testing faster by separating UI and core logic.
[history]: https://github.com/MarkusBordihn/BOs-Easy-NPC/commits/
[upgrade_guide]: https://github.com/MarkusBordihn/BOs-Easy-NPC/wiki/Upgrading
## Note
This change log includes the summarized changes. For the full changelog, please go to
the [GitHub History][history] instead.
Note: Please always back up your world / NPCs before updating to a new version!
Check the [upgrade guide][upgrade_guide] for more information.
### 7.14.0
- Fixed #846 by keeping custom poses for players who start seeing the NPC later.
- Fixed attribute and trading settings missing for players who start seeing the NPC later.
- Fixed changed max uses, XP and trading type not shown in the trading screens until reload.
- Fixed
/easy_npc sound setchanges not reaching players until the NPC was reloaded. - Added game tests that check NPC poses and settings after respawns and for new players.
### 7.13.0
- Fixed color and formatting tags in dialog button names showing as plain text.
- Fixed the button preview in the editor showing lowercase names as a raw translation key.
- Fixed the "Move EasyNPC" item not working for NPC owners outside of creative mode.
- Fixed
/easy_npc owner setreporting success even when the owner could not be changed. - Fixed the game crashing when the URL or player skin screen showed a skin download error.
- Fixed the preset browser search showing no results after scrolling down the list.
- Changed the network protocol version, so client and server must run the same mod version.
- Added
@initiator,@npcand@score()support to dialog button names to fix #841. - Added automatic client tests with the Client Runtime Interface Toolkit.
- Larger core refactoring and code cleanup.
### 7.12.2
- Fixed the Fairy hitbox being far too small, so its name tag and speech bubble sat in its body.
- Fixed scaled NPCs keeping their old hitbox and eye level, so hits, clicks and looking missed.
- Fixed oversized names, lists and NPC data in network packets being read without any limit.
- Fixed invalid NPC positions, scales, attributes, names and durations from being applied.
- Changed Fairy NPCs to take up the space of their model, so they collide and can be clicked.
- Changed Skeleton, Stray and Bogged NPCs to the vanilla hitbox height, they were slightly short.
- Changed the network protocol version, so client and server must run the same mod version.
### 7.12.1
- Fixed #836 by always showing "Restore", including datapack presets, with a reason tooltip.
- Fixed preset import and export messages missing, wrong or not warning about replaced NPCs.
- Fixed the preset browser reloading on each keystroke, leaking NPCs and clearing the selection.
- Fixed selection box drop-down lists being covered by the checkboxes and labels behind them.
- Fixed the preset list sorting, filter order and layout clipping options in small windows.
- Fixed
/easy_npc preset import datawithout a position importing it as a default preset. - Fixed spawn rate limit leaks, unstable preset IDs and "Spawn New" stacking NPCs on one spot.
- Changed "Restore" to refuse instead of spawning a copy when it is not permitted.
- Added sorting, a match count, reload, auto-close, the NPC ID and tooltips for presets and skins.
- Added
matching <pattern>batch imports with limits, a confirmation and a clickable position.
### 7.12.0
- Fixed #833 by showing Easy NPC Wand outlines only to the wand holder, owner and admins.
- Fixed #834 by adding "Set Home Here" and "Reset Home" buttons to the position configuration.
- Fixed #835 by keeping the NPC ID and position in exported presets, so imports restore the same
- Fixed preset imports and spawn eggs losing the owner's list entry and owner objectives.
- Fixed NPCs restored from an automatic backup losing their owner and becoming ownerless.
- Fixed selection lists showing only their first six entries and hiding the rest.
- Changed importing a preset to update the original NPC at its stored position instead of adding a
- Changed completed trades to play the "Trade completed" sound, which stayed silent before.
- Changed the API dialog call to report an unknown dialog label instead of always reporting success.
- Changed NPCs without arms to carry held items at the head or body instead of hiding them.
- Changed the optional Easy Model Entities dependency to require version 2.4.0 or newer.
- Added a "Sound" configuration with sounds for dialogs, speech, swimming, eating and fall damage.
- Added a searchable sound selection with volume and pitch sliders to the "Sound" configuration.
- Added a "Block Vehicles" option to keep NPCs out of boats, minecarts and modded chairs.
- Added the profession selection to all skin configurations and a new built-in skin per NPC type.
- Added client settings to hide name tags behind walls and
highlightEnabledfor wand outlines. - Added an "Exists" condition operation and API access to NPC movement, actions and presets.
### 7.11.0
- Fixed #828 by no longer freezing the server on logout when NPCs follow or watch the player.
- Fixed #831 by moving routine NPC removal messages to the debug log.
- Fixed #832 by making humanoid NPCs ignore custom player models, animations and poses.
- Fixed hourly NPC backups stuttering on large worlds and retaining timestamps of removed NPCs.
- Fixed hourly NPC backups losing the identity, owner and position of the backed-up NPC.
- Fixed owner-login restoration duplicating, repeatedly restoring, reviving or moving unloaded NPCs.
- Fixed NPC index and file synchronization issues causing lost NPCs, crashes or false warnings.
- Fixed stale NPC data after unloading, avoided redundant writes and added repeated-unload warnings.
- Fixed the preset browser failing to list custom and world presets saved in the SNBT format.
- Fixed speech bubbles losing their text and turning translucent with Iris shaders.
- Fixed the "Opacity" of an NPC being ignored while a shader pack is active.
- Fixed text formatting and macro parsing for translated speech bubbles and mod API texts.
- Fixed speech bubbles and their text staying hidden behind blocks while a shader pack is active.
- Added
minLightLevelto keep speech bubbles readable in dark surroundings.
### 7.10.0
- Fixed #829 by allowing bats and other non-walking mobs as the render entity of a Doppler NPC.
- Fixed NPCs rendered as a bat, frog or warden showing a static pose instead of their animation.
- Fixed the NPC name tag showing above the previews in the "Custom Models" configuration.
- Fixed speech bubbles being cut off by walls, doorframes and the NPC's own body.
- Fixed the previews in the "Custom Models" configuration.
- Changed the previews in the "Custom Models" configuration to stand on a common ground line.
- Changed overlapping speech bubbles to move apart and to stay visible when the NPC is off-screen.
- Changed "Navigation: Automatic" to use flying movement for NPCs rendered as a flying mob.
- Changed the render entity list to hide seats, paintings, thrown items and other non-mob entities.
- Added a "Min. hover height" slider for flying NPCs and client settings for speech bubbles.
### 7.9.0
- Fixed modded fish NPCs, like the ones of Tide 2, spinning around instead of swimming upright.
- Fixed "Navigation: Automatic" using ground movement for water NPCs and aquatic model NPCs.
- Fixed the "Random Swimming" objective never moving an NPC that uses aquatic navigation.
- Fixed a swimming NPC shaking or twitching in place instead of holding its tilt and swim depth.
- Fixed a swimming NPC turning in circles forever when it could not reach its next path point.
- Fixed an NPC that fell into water never getting out of it again.
- Fixed a following NPC searching a new path every tick while its target was unreachable.
- Fixed the "Move to" actions stopping short of a raised target or not starting while in the air.
- Fixed "Move back to Home" ignoring height differences and never returning from beyond 32 blocks.
- Fixed the "Opacity" input field being too narrow to show a value of 100.
- Fixed a damaged NPC with an Easy Model Entities model never flashing red.
- Changed modded water NPCs to swim level, vanilla water mobs keep their tilt as before.
- Changed the "Move to" actions to walk up to 48 blocks and to teleport only beyond that range.
- Changed "Move to" and "Move back to Home" to give up after three seconds without progress.
- Changed the timeout of a "Move to" action to count real ticks, it ran twice as long before.
- Changed a new "Random Swimming" objective to rank below following, fleeing and attack goals.
- Changed "Opacity" of an NPC with an Easy Model Entities model to be applied by that mod itself.
- Changed the minimum Easy Model Entities version to 2.3.0, older versions disable the integration.
- Added "Depth below surface" and "Height above floor" sliders for the swim level of an NPC.
- Added log entries for the NPC files written on a world save, with a warning above 250 ms each.
### 7.8.1
- Fixed #827 by rendering fish NPCs in water upright instead of always flopping on their side.
- Fixed #828 by keeping a damaged NPC from blocking the world save, it now falls back to defaults.
- Fixed a restored NPC picking up a random preset ID that changed with every save.
- Changed NPC data to only be written to disk when it actually changed.
### 7.8.0
- Fixed smaller text and UI issues.
- Changed an NPC that is already standing at its target position to finish the movement right away.
- Changed the "None" skin tab to "Advanced", which now holds "Disable Skin" and the texture field.
- Changed the minimum Easy Model Entities version to 2.2.0, older versions are no longer accepted.
- Added a "Move to" action, which sends an NPC to a position, a player, its owner or its home.
- Added a "Move to and Wait" action, which runs the following actions only after the arrival.
- Added an arrival radius, a timeout and an optional teleport to both move actions.
- Added an "Opacity" attribute from 0 to 100, which fades body, armor and hand items together.
- Added a "Set Opacity" action, which turns an NPC into a ghost or hides it completely.
- Added the "Lantern Wraith" preset, a ghost walking a square with a short line at every corner.
- Added API access to the move actions and the opacity of an NPC.
- Added a "Resource Location" skin type, which renders any texture of a mod or a resource pack.
- Added an "Advanced" skin tab, which previews the NPC with the entered texture before applying it.
### 7.7.7
- Fixed #821 by keeping the transparency of 64x64 skins, which Fresh Moves needs for its eyes. Skins
- Fixed #818 by running trade actions for Villager and Wandering Trader NPCs as well.
- Fixed a dialog with several text variants switching its speech bubble size every second.
- Fixed the skin cache storing the processed image instead of the original download.
- Fixed the untranslated interval names, like
PER_DAY, of the "Execution Limit" condition. - Fixed the
sitanimation of Easy Model NPCs, which never used the built-in sitting pose. - Fixed the speech bubble being cut off by the head of an NPC when a player stood close to it.
- Changed speech bubbles to keep their screen size and to move down or aside when a player is close.
- Changed the speech bubble text to render 20% larger than a name tag.
- Changed a time based action set with a "Wait" action to run in order instead of picking one entry.
- Changed dialog texts to wrap later, so an existing dialog can switch to the wider screen layout.
- Changed fallback actions to skip screen actions without a player, like the regular actions do.
- Changed the minimum Easy Model Entities version to 2.1.0, older versions disable the integration.
- Added a "Wait" action, which pauses the following actions of an event for a chosen duration.
- Added the "Countdown Timekeeper" preset, a speech bubble count to ten ending in sound and sparks.
- Added scaling and rotation for Doppler NPCs behind the "Experimental Features" checkbox. Both only
- Added a "Sound" action, which plays a sound at the NPC with sound category, volume and pitch.
- Added "Every 5 Minutes" and "Every 15 Minutes" to the "Execution Limit" condition.
- Added a "Player Idle" condition, which checks how long a player has not moved.
- Added an "Immovable" attribute, which keeps an NPC in place against pushing and knockback.
- Added
/easy_npc pauseto pause a single NPC or all NPCs; the global pause ends with the server. - Added API access to the sound action, the pause state and the idle time of a player.
- Added a texture override per model slot for Easy Model NPCs over
/easy_npc render texture. - Added a "Repeat" playback mode with a count and a time limit to the "Play Animation" action.
- Added API access to animation variants, texture slots and textures of Easy Model NPCs.
### 7.6.0
- Fixed unclear mod conflict errors for duplicate entity data tracker IDs.
- Fixed third-party health bars rendering over NPC previews in configuration and dialog screens.
- Fixed Doppler and Easy Model Entities NPCs using default hitboxes instead of their model size.
- Fixed the
/easy_npccommands suggesting no NPC UUIDs at all on a server. - Fixed the pose list of the "Set Pose" action drawing over its input field.
- Fixed the untranslated "Loop", "After current" and "Action Data Type" labels of the action editor.
- Fixed the missing hint text of the "Chance" condition.
- Fixed long condition hints running out of the editor screen instead of wrapping.
- Fixed the misaligned help icons and text buttons of the "Message" action.
- Fixed changes to the "Set Pose", "Play Animation" and "Stop Animation" actions not being saveable.
- Fixed the speech bubble text sitting closer to its upper border than to its lower one.
- Changed the NPC suggestions to list the crosshair NPC first and only own NPCs without permissions.
- Changed a preset export to only store what differs from a new NPC, without position or owner.
- Changed a preset without objectives or actions to fall back to the defaults of its NPC type.
- Changed events without a player, like "On Spawn" or "On Kill", to check their conditions. An
- Changed a time based action to pick the owner as
@initiatorwhenever the owner is nearby. - Changed speech bubbles to stay visible from 5 up to 18 seconds, depending on the text length.
- Changed the "Set Pose" action to only show its input field for the "custom" pose entry.
- Added time based actions on five fixed steps, from every ~1 second up to every ~15 minutes.
- Added a "Message" action for chat, system message and speech bubble text without a command.
- Added text variants, a sender name, a recipient and translation keys to the "Message" action.
- Added the speech bubble graphic as
easy_npc:textures/gui/speech_bubble.pngfor resource packs. - Added a "Chance" condition in percent and a "Relationship" condition for owner and faction.
- Added spawn, owner login, state change, day / night, weather and the missing "On Trade" events.
- Added a base preset per NPC type under
easy_npc:api/preset/base/, usable as a parent preset. - Added the "Wandering Companion" preset, a talkative NPC built from time based messages.
- Added an action registry, an action handler, a preset validator and richer event data for mods.
- Added a tooltip with name, type and distance to every NPC suggestion of the
/easy_npccommands. - Improved the NPC suggestions, which appear without typing and tolerate a near miss of one block.
### 7.5.0
- Fixed the home position of an NPC always reading as unset, which hid "Home" in the configuration
- Fixed NPCs spawned from a preset, the preset browser or a respawn never getting a home position.
- Fixed an NPC spawned from the preset browser keeping the home position of the world the preset was
- Fixed NPCs being drawn as a white silhouette with a shadow in the configuration, skin and preset
- Fixed #814 by giving every Cobblemon NPC its own animation state instead of one per species.
- Fixed #813 by letting "Move back to Home" work at any distance instead of only near its home.
- Fixed #812 by checking once per session whether a player changed their skin.
- Fixed #810 by accepting Cobblemon aspects of resource packs instead of only "shiny" and "female".
- Fixed the server crashing when an NPC with a "Tempt" objective ticked its goals.
- Fixed a single or boss spawner spawning without any limit when its preset carried no stored NPC.
- Fixed the "Legacy Easy NPC Data" warning appearing for newly created NPCs.
- Fixed missing transparency corrections for old 64x32 skins, which showed layer artifacts.
- Fixed the player skin screen freezing for a moment while a player name was looked up.
- Fixed the "Reset look at ..." objective label, which read "Reset loot at ..." in some languages.
- Fixed the "No Gravity" attribute being ignored after a preset import, which let NPCs fall.
- Fixed the Fabric game tests, which crashed on start because of the development helper mods.
- Fixed NPCs losing their owner when they were spawned again after a despawn.
- Fixed objectives being deleted from an NPC when the mod providing them was missing at start.
- Fixed importing a preset without a stored id, which spawned an NPC without owner and home.
- Fixed "Follow owner" and "Look at owner" keeping their old target after the owner was changed.
- Fixed attack targets staying assigned to an NPC after the targeted entity was gone.
- Fixed the "Look at Item" objective, which could be stored but never did anything.
- Fixed walking animation for Doppler NPC and 3rd party models.
- Fixed Forge never running its server start-up step, which left NPC tracking, factions and the
- Fixed Forge development runs starting without any mixins, which disabled the vanilla entity
- Changed the movement objectives to a fixed order: flee, follow, return home, then stroll. NPCs
- Changed inserting a preset into a vanilla monster spawner to keep its delay, count and range.
- Changed "Follow owner" and "Look at owner" without a chosen target to follow the owner of the NPC.
- Changed datapack presets to
easy_npc/preset/, the old folder still works, but only for easy_npc. - Changed the preset browser to always list its entries in the same order.
- Removed the experimental user-defined NPCs; the extra config file is no longer read or created.
- Removed the unused
SERVER_SKINskin type. - Added new gametest strcuture to support gametest in 1.21.11 and higher.
- Added a reload button to each entry of the player skin screen, to fetch a single skin again.
- Added the reason to the log whenever an NPC is removed, so an unexpected despawn can be traced.
- Added suggestions to
/easy_npc render set species. - Added support for presets from other mods, which no longer have to use the
easy_npcnamespace. - Added a preset visibility that hides a preset from the preset browser and the NPC screens.
- Added a teleport distance and a resting spot offset to the follow objectives.
- Added item tags, a "can be scared" option and a "only without owner" option to "Follow item".
- Added an item field to the look objectives, so an NPC can watch a chosen dropped item.
- Added an identifier per NPC, so a mod can find its own NPCs again.
- Added an option to spawn an NPC again when its owner logs in.
- Added game tests for NeoForge, which had none, and restored the spawn egg, dialog screen, data
- Added game tests for every configuration and editor screen, covering all three mod loaders.
- Added game tests for the home position, covering the spawn default, the stored value and
- Improved the model name parsing, which mistook a species ending in "_shiny" for a variant.
- Improved following of flying NPCs, which now steer directly when there is no path through the air.
- Improved third party support with an API for presets, own objectives and objective configuration.
### 7.4.0
- Fixed #807 by no longer pulling every same-type NPC within 32 blocks into a "Defend Self" fight.
- Fixed #805 by evaluating all visibility settings together instead of stopping at the first one.
- Fixed #804 by keeping the custom name on Doppler NPCs for name based textures and the name tag.
- Fixed #803 by adjusting assets to match typical Minecraft style instead of generic UI style.
- Fixed the day and night detection, which counted sunrise as night and sunset as day.
- Fixed the visibility in the Nether and the End, which used the Overworld time.
- Fixed the time and game mode visibility checkboxes appearing in a random order.
- Fixed game tests only being able to fail on their first assertion, which hid later failures.
- Fixed the "Saddled" horse skin variants, which never showed a saddle.
- Changed "Visible to Owner" and "Visible to Team" to also follow day, night and game mode.
- Changed Evoker, Illusioner and Vindicator variants without "Crossed Arms" to keep their arms down.
- Added a "Defend Faction" objective that attacks whoever hurt a nearby faction member or player.
- Added a system message when faction members fight each other and the faction stays out of it.
- Added a head equipment slot for Illagers so their captain banner can be removed or swapped.
- Added a day and night preview to the display configuration screen.
- Added unit and game tests for the visibility attributes and the faction defense.
- Improved the visibility check performance by reading the display attributes only once per check.
- Improved display attributes from older versions by completing them with their defaults.
- Improved the attack objective screen by disabling "Protect Owner" and "Defend Faction" when unset.
### 7.3.0
- Improved skin variants by carrying their data as typed fields instead of parsing variant names.
- Centralized the Cobblemon mod id and default model on shared constants.
- Reduced duplicated enum code with a shared
EnumUtilshelper forget(String)lookups. - Optimized villager profession and type lookups to use direct registry keys instead of scans.
- Optimized enum name lookups by caching tag names, ids and keys once at construction.
- Added unit and game tests for skin variants, villager resolution and the enum helper.
### 7.1.2
- Fixed #801 by using combination for NPC, Dialog and Action UUIDs to avoid collisions for action
### 7.1.1
- Fixed #800 by lazy loading entity types.
- Fixed #799 by fixing edge cases and adding additional documentation and better log messages.
- Fixed #798 by considering console, commands and command blocks as trusted command sources.
- Fixed a critical single-player / LAN issue where client and server NPCs shared the same registry.
- Fixed a memory leak in the configuration menu handling and added timeout and disconnect cleanup.
- Fixed duplicate downloads when several NPCs request the same skin at the same time.
- Fixed skin lookups failing after a error so a slow server no longer freezes the game.
- Fixed the URL skin screen freezing the game while checking a remote image; the check now runs in
- Added a new World Spawner block that limits an NPC preset across the whole world (all dimensions),
- Hardened remote skin downloads with a strict size limit and safe redirect handling to prevent
blockPrivateAddresses setting.- Improved server performance by only sending entity and player load events to NPCs that actually
### 7.0.0
- Fixed #794 by using the expected type for NPC rendering.
- Fixed scaling screen preview by pinning the entity feet to the 0 line of the scale ruler, so NPCs
box updates.
- Fixed #791 by adding Wandering Trader NPC type.
- Fixed #788 by extending the AI safeguards to Epic Fight and raw NPC variants (Piglin, Villager,
- Fixed #787, #531, #237 and #184 by adding a faction system with
/easy_npc factioncommands,
- Fixed #787, #771 and #572 by adding a new
targetobjectives tab to attack hostile factions or
- Fixed #786 by adding gender and shiny model variants for Cobblemon NPCs, searchable via
female
shiny in the model selection.- Fixed faction combat between invulnerable NPCs by adding the new
Attackable by Factionscombat
- Fixed Cobblemon model selection previews for oversized species by scaling with Cobblemon's own
- Fixed faction management edge cases by validating faction names, sorting faction lists and
- Fixed custom skin reloads by loading and clearing texture caches per skin model instead of always
- Improved the
Attackable by Players/Monsters/Factionscombat attributes to work independently of
Invulnerable, each opening a targeted hole for its own attacker group.- Improved preset command and network handling by splitting the large handlers into smaller focused
- Added Easy Model Entities Support.
- Added faction manager and faction editor screens to create, color and delete factions and manage
FACTION_MANAGEMENT security feature.- Added new
Miscattributes tab as home for the NPC faction assignment. - Added reusable warning and help icon components for inline hints with tooltips.
- Added additional unit and game tests for factions, target objectives and Cobblemon model variants.
### 6.25.0
- Fixed #782, #636, #622 by preserving data components during validations.
- Fixed #780 by caching remote texture downloads and reducing duplicate registrations.
- Fixed #767 by clamping attribute sliders against extreme values from other mods.
- Fixed #754 by adding custom data item matching for NPCs with actions and conditions.
- Fixed texture manager running in the wrong thread may cause crashes and deadlocks in >= 1.21.x.
- Fixed empty UUID handling for action conditions.
- Fixed execution limit reset for actions.
- Added texture registration queue to avoid multiple simultaneous downloads in the same tick.
- Added NPC coin, key and red token as consumable items for NPCs with actions and conditions.
- Added
Welcome Coin Traderas example NPC preset with custom coin, key and red token item data. - Added attribute safeguards against extreme values from other mods.
- Increased fallback max health value from 1024 to 4096 for high-health NPCs.
- Improved texture manager by reducing duplicate texture checks and registrations.
### 6.24.0
- Fixed #459, #775 by adding an option to block interactions with invisible NPCs.
- Fixed #774 startup crash related to optional Epic Fight and Cobblemon entity type maps.
- Fixed #773 by checking timed trade resets during base ticks and before opening trade screens.
- Fixed trade reset timing by increasing internal tickers correctly.
- Added time of day and weather conditions for #459.
- Added additional unit and game tests for trade resets, ticker handling and entity attributes.
- Added
Skywatch Scoutas example NPC preset with time of day and weather conditions.
### 6.23.0
- Fixed #774 by migrating isSunBurnTick error to 26.x.
- Fixed #772 by adjusting texture retries with 403 and 404 errors and lowering logging.
- Fixed #770 item rendering for Epic Fight NPCs (Evoker, Pillager, Vindicator and humanoid skins).
- Fixed #769 door loops with NPCs not reliably opening or closing doors.
- Fixed #760 by adding a dialog option and config setting (buttonConditionMode: LOCK or HIDE) to
- Fixed #709 by adding color picker popup for names with 32 colors and/or a manual RGB/hex value.
- Fixed NPC name color being reset when renaming without a specified color by preserving the
- Improved the door movement attributes so "Pass Door" is automatically enabled while "Open Door"
### 6.22.0
- Fixed #766 by passing the full server player context to command execution for better compatibility
- Fixed #764 by adding entity health, npc health conditions and NPC preset
Grukk, the Sparring Post as example for using these conditions.- Fixed #763 by making sure dialog button execution limits are now recorded.
- Fixed #758 by providing a example NPC preset named
One Wish Companion. - Fixed crashes related to 3rd party villager AI reading non-registered brain memories on Easy NPC
- Fixed Dialog buttons are not locked for server-side data as preparation for #760 and #644.
- Fixed #628 by adding conditional dialog opening support / command for better control over when
- Added brain AI for Piglin and Piglin Brute NPCs and registered the full vanilla brain memory set.
- Added additional guns to the gun tag for #757.
- Added a new "Open Dialog (Conditional)" action that opens a named dialog only if its conditions
- Added new entity health and npc health conditions for actions, dialogs and dialogs buttons.
- Added Piglin, Piglin Brute and Zombified Piglin NPCs invulnerable, for consistency with other
- Added a new "Knockback Immunity" combat attribute that prevents the NPC from being knocked back by
- Added a new "Explosion Immunity" combat attribute that makes the NPC immune to explosion damage
- Moved the "Projectile Collision" attribute to the Combat attribute screen, where it fits better
### 6.21.0
- Fixed item attachment for Illagers in crossed-arms pose.
- Fixed broken illager crossbow attack goal.
- Fixed crashes related to 3rd party items which are not renderable as hand items #756.
- Fixed crashes related to 3rd party mixins trying to access non-existing model parts #756.
- Fixed log.info spam message by reducing log verbosity and adding additional checks for custom
- Improved EasyNPCModelManager performance.
- Refactored NPC renderers to remove default hand item layer.
### 6.20.0
- Fixed crashes related to 3rd mods trying to access non-existing NPCs goals.
### 6.19.0
Note: This update adjusted the dialog background images by 10x6 pixels, which may require users to
adjust their custom dialog backgrounds if they are using custom ones.
- Fixed #752, #130 by adding dialog button condition support to allow to disable buttons.
- Fixed #683, #215 by adding typewriter effect support for dialog text.
- Fixed #690, #309 by allowing conditions for dialog, dialog buttons and interactions.
- Fixed smaller UI issues with dialog screen layout and background.
- Refactored dialog background images by 10x6 pixels on each side.
- Refactored dialog screen layout to better fit the new background size and improve appearance.
- Added typewriter effect and client configuration for dialog text.
- Added condition symbols to indicate the condition status for dialog, buttons and interactions.
- Added amount field for item conditions to allow checking for specific amounts of items.
- Added
Threshold Wardenas example NPC preset with various conditions and actions. - Added smaller bug fixes and optimizations related to dialog conditions and button states.
### 6.18.0
Note: This update changes the internal data format for conditions and actions, which may reset /
remove legacy existing execution-limit entries without stored IDs.
- Fixed #745 by adding conditions for actions to allow more complex and dynamic behavior.
- Fixed #652 by adding dialog button tooltip for longer texts.
- Fixed #687 by adding command value tooltip to show the full value.
- Added Experience Level conditions.
- Added Game-mode conditions.
- Added has item in inventory condition.
- Added has item in hand condition with (main hand and off-hand) support.
- Added player health condition.
- Added player tag condition.
- Added player team condition.
- Added Goldmere example NPC preset with various conditions and actions.
- Added negative condition support to allow negating conditions for more complex logic.
- Removed parameter pseudo IDs for
ActionDataEntryand replaced them with random UUIDs. - Refactored condition system to allow more condition types.
### 6.17.0
- Fixed #738 by adding additional tooltips for "Execute as player"
- Fixed to detailed logs by reducing log.info messages during startup and in-game.
- Added additional unit and game-tests.
### 6.16.0
- Fixed #732 by providing option to disable ESC key and close button for dialogs.
- Fixed #723 by avoid auto-close in specific cases like trading screens.
- Added general dialog configuration options to allow users to customize dialog behavior.
- Added avatar scaling and position offset options for dialogs.
- Added missing translation keys.
### 6.15.1
- Fixed #735 by extending the correct base class.
- Fixed several 26.1.2 specific issues from manual spawn testing.
### 6.15.0 (Trades, Player Heads, Epic Fight and QOL updates)
- Fixed #731 by resyncing species data, if species list is empty on the client.
- Fixed #730 by improving Epic Fight integration and enabled experimental features.
- Fixed #729 by making sure trade uses are stored correctly.
- Fixed #728 by adding custom head support for player heads.
- Fixed #689 by showing remaining trade uses and allow resetting manually and automatically.
- Fixed #218 and #132 with new trade configuration screen and better support for custom trades.
- Fixed trade specific edge by switching between basic and normal/advanced trading mode.
- Fixed dialog button text is truncated with tooltip showing the full text.
- Fixed Cobblemon animation issues by syncing animation state with Cobblemon Animation System.
- Added per trade specific actions to allow users triggering actions after buys.
- Added trade reset button to reset all trades easily.
- Added trade usage information to trade configuration screen.
- Added experimental feature state to allow users to manually enable experimental features.
- Added Griselda Grindstone as example trader with actions.
- Cleanup test files.
### 6.14.0
- Fixed #727 by making sure changes are synced to the client when changing values.
- Fixed #726 by adding additional allow lists for specific commands.
- Fixed #686, #389, #304, #211 by adding basic Cobblemon support with Cobblemon NPC.
- Fixed dialog misalignment and navigation issues by adjusting dialog sprites and screens.
- Fixed x and z root rotation by correcting rotation logic and pivot calculations.
- Added basic Cobblemon support with custom NPC type and model for testing.
### 6.13.0 (Security and Permissions Updates)
Notes: This update includes better security checks and permissions for multiplayer environments. It
allows to execute server commands which can be potentially dangerous if used with malicious intent.
- The update splits the model root data and logic from the rest of the model part data and logic,
- Fixed #725 by separating model root data and logic from the rest of the model part data and logic.
- Fixed #722 by supporting .sbnt files as local presets.
- Fixed #675 by adding dedicated assets for dialog and config screen backgrounds.
- Fixed #605, #532, #529 with new security checks and permissions system.
- Fixed #469, #311 by adding experimental api documentation and examples for custom model support.
- Fixed double rendering of config screen background by removing redundant background rendering.
- Fixed Ghast and Slime hitbox and name tag position issues by adjusting bounding box.
- ⚠️ Added security checks to prevent potential exploits and allow safe usage in multiplayer
- Replaced dynamic dialog screen background with a static one for better performance, customization
- Replaced dynamic config screen background with a static one for better performance.
- Refactored config-ui specific components and removed them from the core mod.
- Removed duplicated sprite sheets.
- Prepare permission system for possible Luck Perms integration in the future like #712.
- General code cleanup and optimizations related to config screen rendering and assets.
### 6.12.0
- Fixed #714 by adding additional checks for custom model part list based on vanilla models.
- Fixed #713 by reducing log verbosity with downgraded per-NPC INFO messages to DEBUG and
- Fixed #711 by reduced oversized startup/config log output.
- Fixed NBT validation guard to prevent unnecessary buffer allocations in production.
- Added model part name constants to EasyNPCModelManager for consistent usage across mixins.
- Improved RenderEntityTypeSupportConfig by enhancing filter logic and optimizing data structures
- Removed verbose debug logs that dump large data structures.
### 6.11.1
- Fixed #710 by improving backward-compatible parsing for recoverable trade data.
### 6.11.0
- Fixed #703 rendering issue with new custom layer system and hand renderings.
- Fixed #701 by adding additional safeguards and logging for invalid trading offers.
- Fixed smart animation not working properly with modified head position.
- Fixed head tracking by moving player detection back to server side-only.
- Fixed CustomLookAtPlayerGoal to better handle edge cases and reduce jitter.
- Fixed issue with Doppler NPCs keeping their hand inventory.
- Improved PoseManager logging message.
- Updated logo with a new design.
### 6.10.0
- Fixed #698 by adding try and catch for 3rd party entity creation.
- Fixed #695 by clearing model part rotations/positions when switching to a
DEFAULTvanilla pose. - Fixed #695 by applying lock rotation and pose animation only when the NPC is idle.
- Fixed #695 by correcting root rotation pivot to use actual bounding box height instead of 0.5f.
- Fixed multiple objective registration issues including inverted
isTargetedPlayercheck, wrong
targets.
- Fixed goal reference being retained after objective is unregistered.
- Removed auto-lock of ROOT rotation when loading poses; root lock is now user-controlled.
- Added lock rotation checkbox to the advanced and custom pose configuration screens.
- Added model-specific pose key filtering in
ConfigurationMenuHandlerfor the default pose screen. - Added unit tests for
CustomPosition,CustomRotation,CustomScale,ModelPose,
ModelAnimationBehavior and ModelAnimationData.- Added
NPCDataIsolationTestHelperand game tests for Fabric and Forge. - Increased max head yaw range from 60° to 65°.
### 6.9.0
- Fixed #692, #666 by adding caching and safeguards to prevent redundant retriggering of NPC entity
- Fixed #651, #617 by adding basic custom poses for all supported NPC types.
- Fixed #597 by adding additional Flee goals for fleeing from players, villagers, monsters, ...
- Fixed pose loading to read directly from mod resources instead of copying files to disk.
- Fixed duplicate
saveNPCcalls on entity join by checking existing registry entry first. - Added
despawnandspawncommands to remove and re-spawn NPCs by UUID with configurable removal
- Added
ModelPoseAPIandEasyNPCEntityHandlerpublic API classes for controlling NPC poses and
- Added pose data files for all supported NPC types.
- Added lock rotation checkbox to the basic pose configuration screen.
- Added
MoveToPositionGoalto move an NPC to a position before executing a callback action. - Added
EasyNPCLookControlandEasyNPCBodyRotationControlto respect locked root rotation. - Added synced owner change and dimension change to the NPC entity data index.
- Added EasyNPCItemAttachmentLayer into various entity renderers.
- Added dedicated
Flee Objectiveconfiguration tab with objectives for fleeing creepers, monsters,
- Added
FOLLOW_ITEMobjective to the follow objectives tab to make NPCs follow item entities by
minecraft:apple).- Added
LookAtEntityByUUIDGoaland enabled the look-at-entity-by-UUID and look-at-owner objectives
- Added
persistentflag toSynchedDataIndexso that transient indices (e.g. crossbow charge,
- Added configurable
customParticlesEnabledflag toSlimeBasefor API consumers. - Added
SoundType.PETand mappedCAT_PURRto the cat NPC for tamed ambient sound variety. - Reduced log verbosity for periodic NPC save operations from INFO to DEBUG.
### 6.8.3
- Fixed #680 by enforcing version miss-match by upgrading network protocol version.
- Fixed #679 by resetting position, rotation and size for name tag.
- Fixed #665 by adding multi state slide for root rotations.
- Fixed #664 by adding option to disable following mouse cursor for easier posing.
- Fixed #663 by improve support for X and Z root rotations.
- Fixed #661 by adding quick rotation with NPC wand and sneaking to the NPC to rotate the root to
- Fixed move tool is wrongly triggering interactions by adding check for move tool in interaction
- Fixed Preset Item is wrongly triggering interactions by adding check for preset item in
- Fixed Slime and Ghast hitbox and name tag position issues by adjusting bounding box and eye height
- Fixed Slime and Ghast GUI position by adjusting offset values.
### 6.8.2
- Fixed #677 by extending
SafeMerchantDatawith notifyTrade to avoid crashes. - Added progression data support for leveling up NPCs based on player interactions and actions.
- Added global NPC tracking system for better management and debugging of NPCs across the world.
- Added
OriginalModelConfig.withVariantTexture()option to allow using variant textures with the
### 6.8.1
- Fixed #676 by using existing preset helper method instead of custom one.
### 6.8.0 (Adding API support)
- Fixed #667 by adding warning messages and additional checks for invalid network packets.
- Fixed Horse spawn eggs model.
- Fixed pose support for allay, chicken, creeper, fox, ghast, horse, illager, iron golem, slime and
- Added NPC base classes for better API support.
- Added NPC raw classes for advanced API support.
- Added Slim and Ghast NPC types.
- Added Custom Model API for easier integration with other mods and custom models.
- Refactored internal data handling and registration for better maintainability and future
### 6.7.1
- Fixed #657 and #656 by adding additional client side checks for vanilla bug.
### 6.7.0
- Fixed #650 by implementing Wolf Leg Animations in setupAnim method.
- Fixed #648 by fixing canBeHitByProjectiles translation.
- Fixed #645 by adding
allowBypassInvulnerabilityconfig option to allow/deny bypassing
- Fixed delete button showing label even with small width.
- Fixed up and down buttons not positioned correctly in some cases.
- Fixed name tag showing up for dialog and configuration UI.
- Fixed distance action issue were multiple actions are not properly triggered.
- Fixed issues with NPC presets.
- Fixed Cat NPC and Wolf NPC owner data not syncing properly.
- Added preset browser for easier selection of common NPC presets.
- Added preset .snbt (text) export and import functionality for sharing NPC presets.
- Refactored existing NPC presets to use new .snbt format.
- Refactored spawner system to use new preset format for better maintainability and future
### 6.6.2
- Fixed #643 by rework scaling system.
- Fixed scaling not properly updating hitbox and nametag position after restart / reload.
- Added MID and MOUSE_OVER name tag visibility modes for finer control over NPC name display.
- Added team-based name tag visibility support respecting vanilla Team.
### 6.6.1
- Fixed #638 by refactored internal data handling for display attributes.
### 6.6.0
- Fixed #634 by implementing asynchronous texture loading with dedicated thread pool.
- Fixed texture loading blocking render thread causing game freezes.
- Fixed race conditions in texture reload protection using atomic operations.
- Fixed resource leaks in HTTP connections during remote texture downloads.
- Fixed URL validation spam allowing multiple simultaneous downloads of the same texture.
- Fixed exception handling for remote image validation preventing crashes on invalid URLs.
- Fixed
defineId called for:warning messages during NPC loading. - Refactored texture loading architecture with multi-level defense and rate limiting.
- Refactored entity data registration logic for better maintainability.
- Converted data classes to modern Java records for better immutability and thread-safety.
- Added thread-safe session server spam protection with ConcurrentHashMap.
- Added comprehensive error recovery with automatic cooldown reset on failures.
- Improved texture loading with 2-thread pool and 500ms rate limiting.
- Improved exception handling with specific catch blocks for IIOException and FileNotFoundException.
### 6.5.2
- Fixed Villager profession and job skin issue.
- Improved GitHub workflows by adding cache for gradle dependencies.
- Improved Gradle build time and cleanup tasks.
### 6.5.1
- Fixed #632 by implementing ON_KILL action type and event.
- Fixed #629 by improving texture handling performance, caching, and memory usage.
- Fixed kill command is not working on NPCs.
- Fixed texture reload protection preventing cache reload after eviction.
- Fixed WebP validation bug in remote image validator (missing return statement).
- Refactored texture handling logic for better maintainability and future improvements.
- Added time-based reload protection (60 seconds) to replace permanent blocking mechanism.
- Added missing variant textures for chicken, pig and wolf.
- Added additional unit tests for texture handling.
- Improved gradle build tasks.
### 6.5.0
- ⚠️ Removed jar-in-jar bundle approach for better mod compatibility and api capabilities.
- Fixed #627 scissor implementation for better compatibility with other mods.
- Fixed #625 lively animation issues when using rotated or moved model parts.
- Fixed default animation are canceled when using scaled model parts.
- Added better pose animation control with smart, default und none options.
### 6.4.1
- Fixed #626 screen switching logic for different NPC UUIDs, thanks to
Spawnbladefor the detailed
### 6.4.0
- Fixed #626 by improving dialog data validation and error handling.
- Fixed #623 by refactoring render data and render handling.
- Fixed #622 by making sure custom data are properly saved and loaded.
- Fixed open dialog action type to allow opening dialogs from other NPCs.
- Fixed hashing issues by adding missing equals and hashCode methods for ConditionDataSet and
- Added custom data test item for #622 and easier testing of custom data.
- Improved records and fixed potential issues with missing data.
### 6.3.0
- Refactored config ui specific components and removed them from the core mod.
- Fixed dialog data by filtering dialog data before sending to the client.
- Fixed dialog editor layout issues and improved usability.
- Fixed missing default values for some dialog data fields.
- Added dialog priority support to control the order of dialog execution.
- Added condition support for dialog and scoreboard actions.
- Added frequency support for dialog to limit how often an dialog can be shown.
- Added new NPC preset to for scoreboard and condition support.
- Improved dialog button data format by removing redundant fields.
### 6.2.0
- Fixed legacy custom name parsing.
- Fixed string injection within dialogs.
- Fixed missing translation for action types.
- Added scoreboard action type to increase, decrease, set scoreboard values.
- Added
@score(...)NPC macro to display scoreboard values in the dialog. - Added additional unit tests.
- Improved spin button with indicators and better usability.
### 6.1.2
- Fixed container and menu sync issues with missing close container packets.
- Fixed close button not working in some cases.
- Fixed jumping mouse cursor between screen transitions.
- Fixed translation files and removed duplicate and deprecated entries.
- Moved Easy NPC wand to existing core item tab instead of creating a new one.
- Added cat pose support for different model parts (except tail).
- Improved EasyNPCWand glowing effect performance by disabling it when not needed.
- Improved custom entity detection by excluding non-living entities like displays, makers, throwns
- Improved cat variant handling.
### 6.1.1
- Fixed #615 by checking if item is equipped in one of the hands.
- Fixed #612 by re-validating entity types.
- Fixed #610 by force sync of hat and head layers for specific models.
- Fixed orc textures.
- Fixed cat variant handling for 1.21.5.
- Fixed player render by adjusting render state
skinfield. - Fixed cat renderer by adjusting render state
texturefield. - Fixed position, scaling and rotation preview.
- Fixed Fairy model.
- Improved custom model support and performance, by moving related logic into to client side only.
- Improved caching of player to UUID mappings for player skins.
- Limited change model commands and logic to Doppler NPCs only.
- Added renderEntityRaw method to render NPC as-it-is.
### 6.1.0 ✨
This is a major release. Please back up your worlds and NPC data before updating. This version
contains many improvements, optimizations, and internal changes that are **not fully compatible**
with earlier releases.
⚠️ Breaking changes
- Existing NPCs and their configuration data from versions before 6.1.0 may not load correctly or
- Internal data formats and some behaviors have been refactored to support new use-cases.
🧩 New modular structure
Easy NPC is now split into three separate mods:
- Easy NPC** – Bundle that includes both Core and Configuration UI for a plug‑and‑play experience.
- Easy NPC: Core** – Lightweight runtime and logic for NPCs, with minimal dependencies. Intended
- Easy NPC: Configuration UI** – Standalone configuration interface for creating and editing NPCs.
🎯 Why this change?
- Allows servers and modpacks to ship only the **Core** mod on the server side for a leaner setup.
- Reduces memory usage and load times when the UI is not required everywhere.
- Makes development and testing faster by separating UI and core logic.
[history]: https://github.com/MarkusBordihn/BOs-Easy-NPC/commits/
[upgrade_guide]: https://github.com/MarkusBordihn/BOs-Easy-NPC/wiki/Upgrading
## Note
This change log includes the summarized changes. For the full changelog, please go to
the [GitHub History][history] instead.
Note: Please always back up your world / NPCs before updating to a new version!
Check the [upgrade guide][upgrade_guide] for more information.
### 7.14.0
- Fixed #846 by keeping custom poses for players who start seeing the NPC later.
- Fixed attribute and trading settings missing for players who start seeing the NPC later.
- Fixed changed max uses, XP and trading type not shown in the trading screens until reload.
- Fixed
/easy_npc sound setchanges not reaching players until the NPC was reloaded. - Added game tests that check NPC poses and settings after respawns and for new players.
### 7.13.0
- Fixed color and formatting tags in dialog button names showing as plain text.
- Fixed the button preview in the editor showing lowercase names as a raw translation key.
- Fixed the "Move EasyNPC" item not working for NPC owners outside of creative mode.
- Fixed
/easy_npc owner setreporting success even when the owner could not be changed. - Fixed the game crashing when the URL or player skin screen showed a skin download error.
- Fixed the preset browser search showing no results after scrolling down the list.
- Changed the network protocol version, so client and server must run the same mod version.
- Added
@initiator,@npcand@score()support to dialog button names to fix #841. - Added automatic client tests with the Client Runtime Interface Toolkit.
- Larger core refactoring and code cleanup.
### 7.12.2
- Fixed the Fairy hitbox being far too small, so its name tag and speech bubble sat in its body.
- Fixed scaled NPCs keeping their old hitbox and eye level, so hits, clicks and looking missed.
- Fixed oversized names, lists and NPC data in network packets being read without any limit.
- Fixed invalid NPC positions, scales, attributes, names and durations from being applied.
- Changed Fairy NPCs to take up the space of their model, so they collide and can be clicked.
- Changed Skeleton, Stray and Bogged NPCs to the vanilla hitbox height, they were slightly short.
- Changed the network protocol version, so client and server must run the same mod version.
### 7.12.1
- Fixed #836 by always showing "Restore", including datapack presets, with a reason tooltip.
- Fixed preset import and export messages missing, wrong or not warning about replaced NPCs.
- Fixed the preset browser reloading on each keystroke, leaking NPCs and clearing the selection.
- Fixed selection box drop-down lists being covered by the checkboxes and labels behind them.
- Fixed the preset list sorting, filter order and layout clipping options in small windows.
- Fixed
/easy_npc preset import datawithout a position importing it as a default preset. - Fixed spawn rate limit leaks, unstable preset IDs and "Spawn New" stacking NPCs on one spot.
- Changed "Restore" to refuse instead of spawning a copy when it is not permitted.
- Added sorting, a match count, reload, auto-close, the NPC ID and tooltips for presets and skins.
- Added
matching <pattern>batch imports with limits, a confirmation and a clickable position.
### 7.12.0
- Fixed #833 by showing Easy NPC Wand outlines only to the wand holder, owner and admins.
- Fixed #834 by adding "Set Home Here" and "Reset Home" buttons to the position configuration.
- Fixed #835 by keeping the NPC ID and position in exported presets, so imports restore the same
- Fixed preset imports and spawn eggs losing the owner's list entry and owner objectives.
- Fixed NPCs restored from an automatic backup losing their owner and becoming ownerless.
- Fixed selection lists showing only their first six entries and hiding the rest.
- Changed importing a preset to update the original NPC at its stored position instead of adding a
- Changed completed trades to play the "Trade completed" sound, which stayed silent before.
- Changed the API dialog call to report an unknown dialog label instead of always reporting success.
- Changed NPCs without arms to carry held items at the head or body instead of hiding them.
- Changed the optional Easy Model Entities dependency to require version 2.4.0 or newer.
- Added a "Sound" configuration with sounds for dialogs, speech, swimming, eating and fall damage.
- Added a searchable sound selection with volume and pitch sliders to the "Sound" configuration.
- Added a "Block Vehicles" option to keep NPCs out of boats, minecarts and modded chairs.
- Added the profession selection to all skin configurations and a new built-in skin per NPC type.
- Added client settings to hide name tags behind walls and
highlightEnabledfor wand outlines. - Added an "Exists" condition operation and API access to NPC movement, actions and presets.
### 7.11.0
- Fixed #828 by no longer freezing the server on logout when NPCs follow or watch the player.
- Fixed #831 by moving routine NPC removal messages to the debug log.
- Fixed #832 by making humanoid NPCs ignore custom player models, animations and poses.
- Fixed hourly NPC backups stuttering on large worlds and retaining timestamps of removed NPCs.
- Fixed hourly NPC backups losing the identity, owner and position of the backed-up NPC.
- Fixed owner-login restoration duplicating, repeatedly restoring, reviving or moving unloaded NPCs.
- Fixed NPC index and file synchronization issues causing lost NPCs, crashes or false warnings.
- Fixed stale NPC data after unloading, avoided redundant writes and added repeated-unload warnings.
- Fixed the preset browser failing to list custom and world presets saved in the SNBT format.
- Fixed speech bubbles losing their text and turning translucent with Iris shaders.
- Fixed the "Opacity" of an NPC being ignored while a shader pack is active.
- Fixed text formatting and macro parsing for translated speech bubbles and mod API texts.
- Fixed speech bubbles and their text staying hidden behind blocks while a shader pack is active.
- Added
minLightLevelto keep speech bubbles readable in dark surroundings.
### 7.10.0
- Fixed #829 by allowing bats and other non-walking mobs as the render entity of a Doppler NPC.
- Fixed NPCs rendered as a bat, frog or warden showing a static pose instead of their animation.
- Fixed the NPC name tag showing above the previews in the "Custom Models" configuration.
- Fixed speech bubbles being cut off by walls, doorframes and the NPC's own body.
- Fixed the previews in the "Custom Models" configuration.
- Changed the previews in the "Custom Models" configuration to stand on a common ground line.
- Changed overlapping speech bubbles to move apart and to stay visible when the NPC is off-screen.
- Changed "Navigation: Automatic" to use flying movement for NPCs rendered as a flying mob.
- Changed the render entity list to hide seats, paintings, thrown items and other non-mob entities.
- Added a "Min. hover height" slider for flying NPCs and client settings for speech bubbles.
### 7.9.0
- Fixed modded fish NPCs, like the ones of Tide 2, spinning around instead of swimming upright.
- Fixed "Navigation: Automatic" using ground movement for water NPCs and aquatic model NPCs.
- Fixed the "Random Swimming" objective never moving an NPC that uses aquatic navigation.
- Fixed a swimming NPC shaking or twitching in place instead of holding its tilt and swim depth.
- Fixed a swimming NPC turning in circles forever when it could not reach its next path point.
- Fixed an NPC that fell into water never getting out of it again.
- Fixed a following NPC searching a new path every tick while its target was unreachable.
- Fixed the "Move to" actions stopping short of a raised target or not starting while in the air.
- Fixed "Move back to Home" ignoring height differences and never returning from beyond 32 blocks.
- Fixed the "Opacity" input field being too narrow to show a value of 100.
- Fixed a damaged NPC with an Easy Model Entities model never flashing red.
- Changed modded water NPCs to swim level, vanilla water mobs keep their tilt as before.
- Changed the "Move to" actions to walk up to 48 blocks and to teleport only beyond that range.
- Changed "Move to" and "Move back to Home" to give up after three seconds without progress.
- Changed the timeout of a "Move to" action to count real ticks, it ran twice as long before.
- Changed a new "Random Swimming" objective to rank below following, fleeing and attack goals.
- Changed "Opacity" of an NPC with an Easy Model Entities model to be applied by that mod itself.
- Changed the minimum Easy Model Entities version to 2.3.0, older versions disable the integration.
- Added "Depth below surface" and "Height above floor" sliders for the swim level of an NPC.
- Added log entries for the NPC files written on a world save, with a warning above 250 ms each.
### 7.8.1
- Fixed #827 by rendering fish NPCs in water upright instead of always flopping on their side.
- Fixed #828 by keeping a damaged NPC from blocking the world save, it now falls back to defaults.
- Fixed a restored NPC picking up a random preset ID that changed with every save.
- Changed NPC data to only be written to disk when it actually changed.
### 7.8.0
- Fixed smaller text and UI issues.
- Changed an NPC that is already standing at its target position to finish the movement right away.
- Changed the "None" skin tab to "Advanced", which now holds "Disable Skin" and the texture field.
- Changed the minimum Easy Model Entities version to 2.2.0, older versions are no longer accepted.
- Added a "Move to" action, which sends an NPC to a position, a player, its owner or its home.
- Added a "Move to and Wait" action, which runs the following actions only after the arrival.
- Added an arrival radius, a timeout and an optional teleport to both move actions.
- Added an "Opacity" attribute from 0 to 100, which fades body, armor and hand items together.
- Added a "Set Opacity" action, which turns an NPC into a ghost or hides it completely.
- Added the "Lantern Wraith" preset, a ghost walking a square with a short line at every corner.
- Added API access to the move actions and the opacity of an NPC.
- Added a "Resource Location" skin type, which renders any texture of a mod or a resource pack.
- Added an "Advanced" skin tab, which previews the NPC with the entered texture before applying it.
### 7.7.7
- Fixed #821 by keeping the transparency of 64x64 skins, which Fresh Moves needs for its eyes. Skins
- Fixed #818 by running trade actions for Villager and Wandering Trader NPCs as well.
- Fixed a dialog with several text variants switching its speech bubble size every second.
- Fixed the skin cache storing the processed image instead of the original download.
- Fixed the untranslated interval names, like
PER_DAY, of the "Execution Limit" condition. - Fixed the
sitanimation of Easy Model NPCs, which never used the built-in sitting pose. - Fixed the speech bubble being cut off by the head of an NPC when a player stood close to it.
- Changed speech bubbles to keep their screen size and to move down or aside when a player is close.
- Changed the speech bubble text to render 20% larger than a name tag.
- Changed a time based action set with a "Wait" action to run in order instead of picking one entry.
- Changed dialog texts to wrap later, so an existing dialog can switch to the wider screen layout.
- Changed fallback actions to skip screen actions without a player, like the regular actions do.
- Changed the minimum Easy Model Entities version to 2.1.0, older versions disable the integration.
- Added a "Wait" action, which pauses the following actions of an event for a chosen duration.
- Added the "Countdown Timekeeper" preset, a speech bubble count to ten ending in sound and sparks.
- Added scaling and rotation for Doppler NPCs behind the "Experimental Features" checkbox. Both only
- Added a "Sound" action, which plays a sound at the NPC with sound category, volume and pitch.
- Added "Every 5 Minutes" and "Every 15 Minutes" to the "Execution Limit" condition.
- Added a "Player Idle" condition, which checks how long a player has not moved.
- Added an "Immovable" attribute, which keeps an NPC in place against pushing and knockback.
- Added
/easy_npc pauseto pause a single NPC or all NPCs; the global pause ends with the server. - Added API access to the sound action, the pause state and the idle time of a player.
- Added a texture override per model slot for Easy Model NPCs over
/easy_npc render texture. - Added a "Repeat" playback mode with a count and a time limit to the "Play Animation" action.
- Added API access to animation variants, texture slots and textures of Easy Model NPCs.
### 7.6.0
- Fixed unclear mod conflict errors for duplicate entity data tracker IDs.
- Fixed third-party health bars rendering over NPC previews in configuration and dialog screens.
- Fixed Doppler and Easy Model Entities NPCs using default hitboxes instead of their model size.
- Fixed the
/easy_npccommands suggesting no NPC UUIDs at all on a server. - Fixed the pose list of the "Set Pose" action drawing over its input field.
- Fixed the untranslated "Loop", "After current" and "Action Data Type" labels of the action editor.
- Fixed the missing hint text of the "Chance" condition.
- Fixed long condition hints running out of the editor screen instead of wrapping.
- Fixed the misaligned help icons and text buttons of the "Message" action.
- Fixed changes to the "Set Pose", "Play Animation" and "Stop Animation" actions not being saveable.
- Fixed the speech bubble text sitting closer to its upper border than to its lower one.
- Changed the NPC suggestions to list the crosshair NPC first and only own NPCs without permissions.
- Changed a preset export to only store what differs from a new NPC, without position or owner.
- Changed a preset without objectives or actions to fall back to the defaults of its NPC type.
- Changed events without a player, like "On Spawn" or "On Kill", to check their conditions. An
- Changed a time based action to pick the owner as
@initiatorwhenever the owner is nearby. - Changed speech bubbles to stay visible from 5 up to 18 seconds, depending on the text length.
- Changed the "Set Pose" action to only show its input field for the "custom" pose entry.
- Added time based actions on five fixed steps, from every ~1 second up to every ~15 minutes.
- Added a "Message" action for chat, system message and speech bubble text without a command.
- Added text variants, a sender name, a recipient and translation keys to the "Message" action.
- Added the speech bubble graphic as
easy_npc:textures/gui/speech_bubble.pngfor resource packs. - Added a "Chance" condition in percent and a "Relationship" condition for owner and faction.
- Added spawn, owner login, state change, day / night, weather and the missing "On Trade" events.
- Added a base preset per NPC type under
easy_npc:api/preset/base/, usable as a parent preset. - Added the "Wandering Companion" preset, a talkative NPC built from time based messages.
- Added an action registry, an action handler, a preset validator and richer event data for mods.
- Added a tooltip with name, type and distance to every NPC suggestion of the
/easy_npccommands. - Improved the NPC suggestions, which appear without typing and tolerate a near miss of one block.
### 7.5.0
- Fixed the home position of an NPC always reading as unset, which hid "Home" in the configuration
- Fixed NPCs spawned from a preset, the preset browser or a respawn never getting a home position.
- Fixed an NPC spawned from the preset browser keeping the home position of the world the preset was
- Fixed NPCs being drawn as a white silhouette with a shadow in the configuration, skin and preset
- Fixed #814 by giving every Cobblemon NPC its own animation state instead of one per species.
- Fixed #813 by letting "Move back to Home" work at any distance instead of only near its home.
- Fixed #812 by checking once per session whether a player changed their skin.
- Fixed #810 by accepting Cobblemon aspects of resource packs instead of only "shiny" and "female".
- Fixed the server crashing when an NPC with a "Tempt" objective ticked its goals.
- Fixed a single or boss spawner spawning without any limit when its preset carried no stored NPC.
- Fixed the "Legacy Easy NPC Data" warning appearing for newly created NPCs.
- Fixed missing transparency corrections for old 64x32 skins, which showed layer artifacts.
- Fixed the player skin screen freezing for a moment while a player name was looked up.
- Fixed the "Reset look at ..." objective label, which read "Reset loot at ..." in some languages.
- Fixed the "No Gravity" attribute being ignored after a preset import, which let NPCs fall.
- Fixed the Fabric game tests, which crashed on start because of the development helper mods.
- Fixed NPCs losing their owner when they were spawned again after a despawn.
- Fixed objectives being deleted from an NPC when the mod providing them was missing at start.
- Fixed importing a preset without a stored id, which spawned an NPC without owner and home.
- Fixed "Follow owner" and "Look at owner" keeping their old target after the owner was changed.
- Fixed attack targets staying assigned to an NPC after the targeted entity was gone.
- Fixed the "Look at Item" objective, which could be stored but never did anything.
- Fixed walking animation for Doppler NPC and 3rd party models.
- Fixed Forge never running its server start-up step, which left NPC tracking, factions and the
- Fixed Forge development runs starting without any mixins, which disabled the vanilla entity
- Changed the movement objectives to a fixed order: flee, follow, return home, then stroll. NPCs
- Changed inserting a preset into a vanilla monster spawner to keep its delay, count and range.
- Changed "Follow owner" and "Look at owner" without a chosen target to follow the owner of the NPC.
- Changed datapack presets to
easy_npc/preset/, the old folder still works, but only for easy_npc. - Changed the preset browser to always list its entries in the same order.
- Removed the experimental user-defined NPCs; the extra config file is no longer read or created.
- Removed the unused
SERVER_SKINskin type. - Added new gametest strcuture to support gametest in 1.21.11 and higher.
- Added a reload button to each entry of the player skin screen, to fetch a single skin again.
- Added the reason to the log whenever an NPC is removed, so an unexpected despawn can be traced.
- Added suggestions to
/easy_npc render set species. - Added support for presets from other mods, which no longer have to use the
easy_npcnamespace. - Added a preset visibility that hides a preset from the preset browser and the NPC screens.
- Added a teleport distance and a resting spot offset to the follow objectives.
- Added item tags, a "can be scared" option and a "only without owner" option to "Follow item".
- Added an item field to the look objectives, so an NPC can watch a chosen dropped item.
- Added an identifier per NPC, so a mod can find its own NPCs again.
- Added an option to spawn an NPC again when its owner logs in.
- Added game tests for NeoForge, which had none, and restored the spawn egg, dialog screen, data
- Added game tests for every configuration and editor screen, covering all three mod loaders.
- Added game tests for the home position, covering the spawn default, the stored value and
- Improved the model name parsing, which mistook a species ending in "_shiny" for a variant.
- Improved following of flying NPCs, which now steer directly when there is no path through the air.
- Improved third party support with an API for presets, own objectives and objective configuration.
### 7.4.0
- Fixed #807 by no longer pulling every same-type NPC within 32 blocks into a "Defend Self" fight.
- Fixed #805 by evaluating all visibility settings together instead of stopping at the first one.
- Fixed #804 by keeping the custom name on Doppler NPCs for name based textures and the name tag.
- Fixed #803 by adjusting assets to match typical Minecraft style instead of generic UI style.
- Fixed the day and night detection, which counted sunrise as night and sunset as day.
- Fixed the visibility in the Nether and the End, which used the Overworld time.
- Fixed the time and game mode visibility checkboxes appearing in a random order.
- Fixed game tests only being able to fail on their first assertion, which hid later failures.
- Fixed the "Saddled" horse skin variants, which never showed a saddle.
- Changed "Visible to Owner" and "Visible to Team" to also follow day, night and game mode.
- Changed Evoker, Illusioner and Vindicator variants without "Crossed Arms" to keep their arms down.
- Added a "Defend Faction" objective that attacks whoever hurt a nearby faction member or player.
- Added a system message when faction members fight each other and the faction stays out of it.
- Added a head equipment slot for Illagers so their captain banner can be removed or swapped.
- Added a day and night preview to the display configuration screen.
- Added unit and game tests for the visibility attributes and the faction defense.
- Improved the visibility check performance by reading the display attributes only once per check.
- Improved display attributes from older versions by completing them with their defaults.
- Improved the attack objective screen by disabling "Protect Owner" and "Defend Faction" when unset.
### 7.3.0
- Improved skin variants by carrying their data as typed fields instead of parsing variant names.
- Centralized the Cobblemon mod id and default model on shared constants.
- Reduced duplicated enum code with a shared
EnumUtilshelper forget(String)lookups. - Optimized villager profession and type lookups to use direct registry keys instead of scans.
- Optimized enum name lookups by caching tag names, ids and keys once at construction.
- Added unit and game tests for skin variants, villager resolution and the enum helper.
### 7.1.2
- Fixed #801 by using combination for NPC, Dialog and Action UUIDs to avoid collisions for action
### 7.1.1
- Fixed #800 by lazy loading entity types.
- Fixed #799 by fixing edge cases and adding additional documentation and better log messages.
- Fixed #798 by considering console, commands and command blocks as trusted command sources.
- Fixed a critical single-player / LAN issue where client and server NPCs shared the same registry.
- Fixed a memory leak in the configuration menu handling and added timeout and disconnect cleanup.
- Fixed duplicate downloads when several NPCs request the same skin at the same time.
- Fixed skin lookups failing after a error so a slow server no longer freezes the game.
- Fixed the URL skin screen freezing the game while checking a remote image; the check now runs in
- Added a new World Spawner block that limits an NPC preset across the whole world (all dimensions),
- Hardened remote skin downloads with a strict size limit and safe redirect handling to prevent
blockPrivateAddresses setting.- Improved server performance by only sending entity and player load events to NPCs that actually
### 7.0.0
- Fixed #794 by using the expected type for NPC rendering.
- Fixed scaling screen preview by pinning the entity feet to the 0 line of the scale ruler, so NPCs
box updates.
- Fixed #791 by adding Wandering Trader NPC type.
- Fixed #788 by extending the AI safeguards to Epic Fight and raw NPC variants (Piglin, Villager,
- Fixed #787, #531, #237 and #184 by adding a faction system with
/easy_npc factioncommands,
- Fixed #787, #771 and #572 by adding a new
targetobjectives tab to attack hostile factions or
- Fixed #786 by adding gender and shiny model variants for Cobblemon NPCs, searchable via
female
shiny in the model selection.- Fixed faction combat between invulnerable NPCs by adding the new
Attackable by Factionscombat
- Fixed Cobblemon model selection previews for oversized species by scaling with Cobblemon's own
- Fixed faction management edge cases by validating faction names, sorting faction lists and
- Fixed custom skin reloads by loading and clearing texture caches per skin model instead of always
- Improved the
Attackable by Players/Monsters/Factionscombat attributes to work independently of
Invulnerable, each opening a targeted hole for its own attacker group.- Improved preset command and network handling by splitting the large handlers into smaller focused
- Added Easy Model Entities Support.
- Added faction manager and faction editor screens to create, color and delete factions and manage
FACTION_MANAGEMENT security feature.- Added new
Miscattributes tab as home for the NPC faction assignment. - Added reusable warning and help icon components for inline hints with tooltips.
- Added additional unit and game tests for factions, target objectives and Cobblemon model variants.
### 6.25.0
- Fixed #782, #636, #622 by preserving data components during validations.
- Fixed #780 by caching remote texture downloads and reducing duplicate registrations.
- Fixed #767 by clamping attribute sliders against extreme values from other mods.
- Fixed #754 by adding custom data item matching for NPCs with actions and conditions.
- Fixed texture manager running in the wrong thread may cause crashes and deadlocks in >= 1.21.x.
- Fixed empty UUID handling for action conditions.
- Fixed execution limit reset for actions.
- Added texture registration queue to avoid multiple simultaneous downloads in the same tick.
- Added NPC coin, key and red token as consumable items for NPCs with actions and conditions.
- Added
Welcome Coin Traderas example NPC preset with custom coin, key and red token item data. - Added attribute safeguards against extreme values from other mods.
- Increased fallback max health value from 1024 to 4096 for high-health NPCs.
- Improved texture manager by reducing duplicate texture checks and registrations.
### 6.24.0
- Fixed #459, #775 by adding an option to block interactions with invisible NPCs.
- Fixed #774 startup crash related to optional Epic Fight and Cobblemon entity type maps.
- Fixed #773 by checking timed trade resets during base ticks and before opening trade screens.
- Fixed trade reset timing by increasing internal tickers correctly.
- Added time of day and weather conditions for #459.
- Added additional unit and game tests for trade resets, ticker handling and entity attributes.
- Added
Skywatch Scoutas example NPC preset with time of day and weather conditions.
### 6.23.0
- Fixed #774 by migrating isSunBurnTick error to 26.x.
- Fixed #772 by adjusting texture retries with 403 and 404 errors and lowering logging.
- Fixed #770 item rendering for Epic Fight NPCs (Evoker, Pillager, Vindicator and humanoid skins).
- Fixed #769 door loops with NPCs not reliably opening or closing doors.
- Fixed #760 by adding a dialog option and config setting (buttonConditionMode: LOCK or HIDE) to
- Fixed #709 by adding color picker popup for names with 32 colors and/or a manual RGB/hex value.
- Fixed NPC name color being reset when renaming without a specified color by preserving the
- Improved the door movement attributes so "Pass Door" is automatically enabled while "Open Door"
### 6.22.0
- Fixed #766 by passing the full server player context to command execution for better compatibility
- Fixed #764 by adding entity health, npc health conditions and NPC preset
Grukk, the Sparring Post as example for using these conditions.- Fixed #763 by making sure dialog button execution limits are now recorded.
- Fixed #758 by providing a example NPC preset named
One Wish Companion. - Fixed crashes related to 3rd party villager AI reading non-registered brain memories on Easy NPC
- Fixed Dialog buttons are not locked for server-side data as preparation for #760 and #644.
- Fixed #628 by adding conditional dialog opening support / command for better control over when
- Added brain AI for Piglin and Piglin Brute NPCs and registered the full vanilla brain memory set.
- Added additional guns to the gun tag for #757.
- Added a new "Open Dialog (Conditional)" action that opens a named dialog only if its conditions
- Added new entity health and npc health conditions for actions, dialogs and dialogs buttons.
- Added Piglin, Piglin Brute and Zombified Piglin NPCs invulnerable, for consistency with other
- Added a new "Knockback Immunity" combat attribute that prevents the NPC from being knocked back by
- Added a new "Explosion Immunity" combat attribute that makes the NPC immune to explosion damage
- Moved the "Projectile Collision" attribute to the Combat attribute screen, where it fits better
### 6.21.0
- Fixed item attachment for Illagers in crossed-arms pose.
- Fixed broken illager crossbow attack goal.
- Fixed crashes related to 3rd party items which are not renderable as hand items #756.
- Fixed crashes related to 3rd party mixins trying to access non-existing model parts #756.
- Fixed log.info spam message by reducing log verbosity and adding additional checks for custom
- Improved EasyNPCModelManager performance.
- Refactored NPC renderers to remove default hand item layer.
### 6.20.0
- Fixed crashes related to 3rd mods trying to access non-existing NPCs goals.
### 6.19.0
Note: This update adjusted the dialog background images by 10x6 pixels, which may require users to
adjust their custom dialog backgrounds if they are using custom ones.
- Fixed #752, #130 by adding dialog button condition support to allow to disable buttons.
- Fixed #683, #215 by adding typewriter effect support for dialog text.
- Fixed #690, #309 by allowing conditions for dialog, dialog buttons and interactions.
- Fixed smaller UI issues with dialog screen layout and background.
- Refactored dialog background images by 10x6 pixels on each side.
- Refactored dialog screen layout to better fit the new background size and improve appearance.
- Added typewriter effect and client configuration for dialog text.
- Added condition symbols to indicate the condition status for dialog, buttons and interactions.
- Added amount field for item conditions to allow checking for specific amounts of items.
- Added
Threshold Wardenas example NPC preset with various conditions and actions. - Added smaller bug fixes and optimizations related to dialog conditions and button states.
### 6.18.0
Note: This update changes the internal data format for conditions and actions, which may reset /
remove legacy existing execution-limit entries without stored IDs.
- Fixed #745 by adding conditions for actions to allow more complex and dynamic behavior.
- Fixed #652 by adding dialog button tooltip for longer texts.
- Fixed #687 by adding command value tooltip to show the full value.
- Added Experience Level conditions.
- Added Game-mode conditions.
- Added has item in inventory condition.
- Added has item in hand condition with (main hand and off-hand) support.
- Added player health condition.
- Added player tag condition.
- Added player team condition.
- Added Goldmere example NPC preset with various conditions and actions.
- Added negative condition support to allow negating conditions for more complex logic.
- Removed parameter pseudo IDs for
ActionDataEntryand replaced them with random UUIDs. - Refactored condition system to allow more condition types.
### 6.17.0
- Fixed #738 by adding additional tooltips for "Execute as player"
- Fixed to detailed logs by reducing log.info messages during startup and in-game.
- Added additional unit and game-tests.
### 6.16.0
- Fixed #732 by providing option to disable ESC key and close button for dialogs.
- Fixed #723 by avoid auto-close in specific cases like trading screens.
- Added general dialog configuration options to allow users to customize dialog behavior.
- Added avatar scaling and position offset options for dialogs.
- Added missing translation keys.
### 6.15.1
- Fixed #735 by extending the correct base class.
- Fixed several 26.1.2 specific issues from manual spawn testing.
### 6.15.0 (Trades, Player Heads, Epic Fight and QOL updates)
- Fixed #731 by resyncing species data, if species list is empty on the client.
- Fixed #730 by improving Epic Fight integration and enabled experimental features.
- Fixed #729 by making sure trade uses are stored correctly.
- Fixed #728 by adding custom head support for player heads.
- Fixed #689 by showing remaining trade uses and allow resetting manually and automatically.
- Fixed #218 and #132 with new trade configuration screen and better support for custom trades.
- Fixed trade specific edge by switching between basic and normal/advanced trading mode.
- Fixed dialog button text is truncated with tooltip showing the full text.
- Fixed Cobblemon animation issues by syncing animation state with Cobblemon Animation System.
- Added per trade specific actions to allow users triggering actions after buys.
- Added trade reset button to reset all trades easily.
- Added trade usage information to trade configuration screen.
- Added experimental feature state to allow users to manually enable experimental features.
- Added Griselda Grindstone as example trader with actions.
- Cleanup test files.
### 6.14.0
- Fixed #727 by making sure changes are synced to the client when changing values.
- Fixed #726 by adding additional allow lists for specific commands.
- Fixed #686, #389, #304, #211 by adding basic Cobblemon support with Cobblemon NPC.
- Fixed dialog misalignment and navigation issues by adjusting dialog sprites and screens.
- Fixed x and z root rotation by correcting rotation logic and pivot calculations.
- Added basic Cobblemon support with custom NPC type and model for testing.
### 6.13.0 (Security and Permissions Updates)
Notes: This update includes better security checks and permissions for multiplayer environments. It
allows to execute server commands which can be potentially dangerous if used with malicious intent.
- The update splits the model root data and logic from the rest of the model part data and logic,
- Fixed #725 by separating model root data and logic from the rest of the model part data and logic.
- Fixed #722 by supporting .sbnt files as local presets.
- Fixed #675 by adding dedicated assets for dialog and config screen backgrounds.
- Fixed #605, #532, #529 with new security checks and permissions system.
- Fixed #469, #311 by adding experimental api documentation and examples for custom model support.
- Fixed double rendering of config screen background by removing redundant background rendering.
- Fixed Ghast and Slime hitbox and name tag position issues by adjusting bounding box.
- ⚠️ Added security checks to prevent potential exploits and allow safe usage in multiplayer
- Replaced dynamic dialog screen background with a static one for better performance, customization
- Replaced dynamic config screen background with a static one for better performance.
- Refactored config-ui specific components and removed them from the core mod.
- Removed duplicated sprite sheets.
- Prepare permission system for possible Luck Perms integration in the future like #712.
- General code cleanup and optimizations related to config screen rendering and assets.
### 6.12.0
- Fixed #714 by adding additional checks for custom model part list based on vanilla models.
- Fixed #713 by reducing log verbosity with downgraded per-NPC INFO messages to DEBUG and
- Fixed #711 by reduced oversized startup/config log output.
- Fixed NBT validation guard to prevent unnecessary buffer allocations in production.
- Added model part name constants to EasyNPCModelManager for consistent usage across mixins.
- Improved RenderEntityTypeSupportConfig by enhancing filter logic and optimizing data structures
- Removed verbose debug logs that dump large data structures.
### 6.11.1
- Fixed #710 by improving backward-compatible parsing for recoverable trade data.
### 6.11.0
- Fixed #703 rendering issue with new custom layer system and hand renderings.
- Fixed #701 by adding additional safeguards and logging for invalid trading offers.
- Fixed smart animation not working properly with modified head position.
- Fixed head tracking by moving player detection back to server side-only.
- Fixed CustomLookAtPlayerGoal to better handle edge cases and reduce jitter.
- Fixed issue with Doppler NPCs keeping their hand inventory.
- Improved PoseManager logging message.
- Updated logo with a new design.
### 6.10.0
- Fixed #698 by adding try and catch for 3rd party entity creation.
- Fixed #695 by clearing model part rotations/positions when switching to a
DEFAULTvanilla pose. - Fixed #695 by applying lock rotation and pose animation only when the NPC is idle.
- Fixed #695 by correcting root rotation pivot to use actual bounding box height instead of 0.5f.
- Fixed multiple objective registration issues including inverted
isTargetedPlayercheck, wrong
targets.
- Fixed goal reference being retained after objective is unregistered.
- Removed auto-lock of ROOT rotation when loading poses; root lock is now user-controlled.
- Added lock rotation checkbox to the advanced and custom pose configuration screens.
- Added model-specific pose key filtering in
ConfigurationMenuHandlerfor the default pose screen. - Added unit tests for
CustomPosition,CustomRotation,CustomScale,ModelPose,
ModelAnimationBehavior and ModelAnimationData.- Added
NPCDataIsolationTestHelperand game tests for Fabric and Forge. - Increased max head yaw range from 60° to 65°.
### 6.9.0
- Fixed #692, #666 by adding caching and safeguards to prevent redundant retriggering of NPC entity
- Fixed #651, #617 by adding basic custom poses for all supported NPC types.
- Fixed #597 by adding additional Flee goals for fleeing from players, villagers, monsters, ...
- Fixed pose loading to read directly from mod resources instead of copying files to disk.
- Fixed duplicate
saveNPCcalls on entity join by checking existing registry entry first. - Added
despawnandspawncommands to remove and re-spawn NPCs by UUID with configurable removal
- Added
ModelPoseAPIandEasyNPCEntityHandlerpublic API classes for controlling NPC poses and
- Added pose data files for all supported NPC types.
- Added lock rotation checkbox to the basic pose configuration screen.
- Added
MoveToPositionGoalto move an NPC to a position before executing a callback action. - Added
EasyNPCLookControlandEasyNPCBodyRotationControlto respect locked root rotation. - Added synced owner change and dimension change to the NPC entity data index.
- Added EasyNPCItemAttachmentLayer into various entity renderers.
- Added dedicated
Flee Objectiveconfiguration tab with objectives for fleeing creepers, monsters,
- Added
FOLLOW_ITEMobjective to the follow objectives tab to make NPCs follow item entities by
minecraft:apple).- Added
LookAtEntityByUUIDGoaland enabled the look-at-entity-by-UUID and look-at-owner objectives
- Added
persistentflag toSynchedDataIndexso that transient indices (e.g. crossbow charge,
- Added configurable
customParticlesEnabledflag toSlimeBasefor API consumers. - Added
SoundType.PETand mappedCAT_PURRto the cat NPC for tamed ambient sound variety. - Reduced log verbosity for periodic NPC save operations from INFO to DEBUG.
### 6.8.3
- Fixed #680 by enforcing version miss-match by upgrading network protocol version.
- Fixed #679 by resetting position, rotation and size for name tag.
- Fixed #665 by adding multi state slide for root rotations.
- Fixed #664 by adding option to disable following mouse cursor for easier posing.
- Fixed #663 by improve support for X and Z root rotations.
- Fixed #661 by adding quick rotation with NPC wand and sneaking to the NPC to rotate the root to
- Fixed move tool is wrongly triggering interactions by adding check for move tool in interaction
- Fixed Preset Item is wrongly triggering interactions by adding check for preset item in
- Fixed Slime and Ghast hitbox and name tag position issues by adjusting bounding box and eye height
- Fixed Slime and Ghast GUI position by adjusting offset values.
### 6.8.2
- Fixed #677 by extending
SafeMerchantDatawith notifyTrade to avoid crashes. - Added progression data support for leveling up NPCs based on player interactions and actions.
- Added global NPC tracking system for better management and debugging of NPCs across the world.
- Added
OriginalModelConfig.withVariantTexture()option to allow using variant textures with the
### 6.8.1
- Fixed #676 by using existing preset helper method instead of custom one.
### 6.8.0 (Adding API support)
- Fixed #667 by adding warning messages and additional checks for invalid network packets.
- Fixed Horse spawn eggs model.
- Fixed pose support for allay, chicken, creeper, fox, ghast, horse, illager, iron golem, slime and
- Added NPC base classes for better API support.
- Added NPC raw classes for advanced API support.
- Added Slim and Ghast NPC types.
- Added Custom Model API for easier integration with other mods and custom models.
- Refactored internal data handling and registration for better maintainability and future
### 6.7.1
- Fixed #657 and #656 by adding additional client side checks for vanilla bug.
### 6.7.0
- Fixed #650 by implementing Wolf Leg Animations in setupAnim method.
- Fixed #648 by fixing canBeHitByProjectiles translation.
- Fixed #645 by adding
allowBypassInvulnerabilityconfig option to allow/deny bypassing
- Fixed delete button showing label even with small width.
- Fixed up and down buttons not positioned correctly in some cases.
- Fixed name tag showing up for dialog and configuration UI.
- Fixed distance action issue were multiple actions are not properly triggered.
- Fixed issues with NPC presets.
- Fixed Cat NPC and Wolf NPC owner data not syncing properly.
- Added preset browser for easier selection of common NPC presets.
- Added preset .snbt (text) export and import functionality for sharing NPC presets.
- Refactored existing NPC presets to use new .snbt format.
- Refactored spawner system to use new preset format for better maintainability and future
### 6.6.2
- Fixed #643 by rework scaling system.
- Fixed scaling not properly updating hitbox and nametag position after restart / reload.
- Added MID and MOUSE_OVER name tag visibility modes for finer control over NPC name display.
- Added team-based name tag visibility support respecting vanilla Team.
### 6.6.1
- Fixed #638 by refactored internal data handling for display attributes.
### 6.6.0
- Fixed #634 by implementing asynchronous texture loading with dedicated thread pool.
- Fixed texture loading blocking render thread causing game freezes.
- Fixed race conditions in texture reload protection using atomic operations.
- Fixed resource leaks in HTTP connections during remote texture downloads.
- Fixed URL validation spam allowing multiple simultaneous downloads of the same texture.
- Fixed exception handling for remote image validation preventing crashes on invalid URLs.
- Fixed
defineId called for:warning messages during NPC loading. - Refactored texture loading architecture with multi-level defense and rate limiting.
- Refactored entity data registration logic for better maintainability.
- Converted data classes to modern Java records for better immutability and thread-safety.
- Added thread-safe session server spam protection with ConcurrentHashMap.
- Added comprehensive error recovery with automatic cooldown reset on failures.
- Improved texture loading with 2-thread pool and 500ms rate limiting.
- Improved exception handling with specific catch blocks for IIOException and FileNotFoundException.
### 6.5.2
- Fixed Villager profession and job skin issue.
- Improved GitHub workflows by adding cache for gradle dependencies.
- Improved Gradle build time and cleanup tasks.
### 6.5.1
- Fixed #632 by implementing ON_KILL action type and event.
- Fixed #629 by improving texture handling performance, caching, and memory usage.
- Fixed kill command is not working on NPCs.
- Fixed texture reload protection preventing cache reload after eviction.
- Fixed WebP validation bug in remote image validator (missing return statement).
- Refactored texture handling logic for better maintainability and future improvements.
- Added time-based reload protection (60 seconds) to replace permanent blocking mechanism.
- Added missing variant textures for chicken, pig and wolf.
- Added additional unit tests for texture handling.
- Improved gradle build tasks.
### 6.5.0
- ⚠️ Removed jar-in-jar bundle approach for better mod compatibility and api capabilities.
- Fixed #627 scissor implementation for better compatibility with other mods.
- Fixed #625 lively animation issues when using rotated or moved model parts.
- Fixed default animation are canceled when using scaled model parts.
- Added better pose animation control with smart, default und none options.
### 6.4.1
- Fixed #626 screen switching logic for different NPC UUIDs, thanks to
Spawnbladefor the detailed
### 6.4.0
- Fixed #626 by improving dialog data validation and error handling.
- Fixed #623 by refactoring render data and render handling.
- Fixed #622 by making sure custom data are properly saved and loaded.
- Fixed open dialog action type to allow opening dialogs from other NPCs.
- Fixed hashing issues by adding missing equals and hashCode methods for ConditionDataSet and
- Added custom data test item for #622 and easier testing of custom data.
- Improved records and fixed potential issues with missing data.
### 6.3.0
- Refactored config ui specific components and removed them from the core mod.
- Fixed dialog data by filtering dialog data before sending to the client.
- Fixed dialog editor layout issues and improved usability.
- Fixed missing default values for some dialog data fields.
- Added dialog priority support to control the order of dialog execution.
- Added condition support for dialog and scoreboard actions.
- Added frequency support for dialog to limit how often an dialog can be shown.
- Added new NPC preset to for scoreboard and condition support.
- Improved dialog button data format by removing redundant fields.
### 6.2.0
- Fixed legacy custom name parsing.
- Fixed string injection within dialogs.
- Fixed missing translation for action types.
- Added scoreboard action type to increase, decrease, set scoreboard values.
- Added
@score(...)NPC macro to display scoreboard values in the dialog. - Added additional unit tests.
- Improved spin button with indicators and better usability.
### 6.1.2
- Fixed container and menu sync issues with missing close container packets.
- Fixed close button not working in some cases.
- Fixed jumping mouse cursor between screen transitions.
- Fixed translation files and removed duplicate and deprecated entries.
- Moved Easy NPC wand to existing core item tab instead of creating a new one.
- Added cat pose support for different model parts (except tail).
- Improved EasyNPCWand glowing effect performance by disabling it when not needed.
- Improved custom entity detection by excluding non-living entities like displays, makers, throwns
- Improved cat variant handling.
### 6.1.1
- Fixed #615 by checking if item is equipped in one of the hands.
- Fixed #612 by re-validating entity types.
- Fixed #610 by force sync of hat and head layers for specific models.
- Fixed orc textures.
- Fixed cat variant handling for 1.21.5.
- Fixed player render by adjusting render state
skinfield. - Fixed cat renderer by adjusting render state
texturefield. - Fixed position, scaling and rotation preview.
- Fixed Fairy model.
- Improved custom model support and performance, by moving related logic into to client side only.
- Improved caching of player to UUID mappings for player skins.
- Limited change model commands and logic to Doppler NPCs only.
- Added renderEntityRaw method to render NPC as-it-is.
### 6.1.0 ✨
This is a major release. Please back up your worlds and NPC data before updating. This version
contains many improvements, optimizations, and internal changes that are **not fully compatible**
with earlier releases.
⚠️ Breaking changes
- Existing NPCs and their configuration data from versions before 6.1.0 may not load correctly or
- Internal data formats and some behaviors have been refactored to support new use-cases.
🧩 New modular structure
Easy NPC is now split into three separate mods:
- Easy NPC** – Bundle that includes both Core and Configuration UI for a plug‑and‑play experience.
- Easy NPC: Core** – Lightweight runtime and logic for NPCs, with minimal dependencies. Intended
- Easy NPC: Configuration UI** – Standalone configuration interface for creating and editing NPCs.
🎯 Why this change?
- Allows servers and modpacks to ship only the **Core** mod on the server side for a leaner setup.
- Reduces memory usage and load times when the UI is not required everywhere.
- Makes development and testing faster by separating UI and core logic.
[history]: https://github.com/MarkusBordihn/BOs-Easy-NPC/commits/
[upgrade_guide]: https://github.com/MarkusBordihn/BOs-Easy-NPC/wiki/Upgrading
## Note
This change log includes the summarized changes. For the full changelog, please go to
the [GitHub History][history] instead.
Note: Please always back up your world / NPCs before updating to a new version!
Check the [upgrade guide][upgrade_guide] for more information.
### 7.14.0
- Fixed #846 by keeping custom poses for players who start seeing the NPC later.
- Fixed attribute and trading settings missing for players who start seeing the NPC later.
- Fixed changed max uses, XP and trading type not shown in the trading screens until reload.
- Fixed
/easy_npc sound setchanges not reaching players until the NPC was reloaded. - Added game tests that check NPC poses and settings after respawns and for new players.
### 7.13.0
- Fixed color and formatting tags in dialog button names showing as plain text.
- Fixed the button preview in the editor showing lowercase names as a raw translation key.
- Fixed the "Move EasyNPC" item not working for NPC owners outside of creative mode.
- Fixed
/easy_npc owner setreporting success even when the owner could not be changed. - Fixed the game crashing when the URL or player skin screen showed a skin download error.
- Fixed the preset browser search showing no results after scrolling down the list.
- Changed the network protocol version, so client and server must run the same mod version.
- Added
@initiator,@npcand@score()support to dialog button names to fix #841. - Added automatic client tests with the Client Runtime Interface Toolkit.
- Larger core refactoring and code cleanup.
### 7.12.2
- Fixed the Fairy hitbox being far too small, so its name tag and speech bubble sat in its body.
- Fixed scaled NPCs keeping their old hitbox and eye level, so hits, clicks and looking missed.
- Fixed oversized names, lists and NPC data in network packets being read without any limit.
- Fixed invalid NPC positions, scales, attributes, names and durations from being applied.
- Changed Fairy NPCs to take up the space of their model, so they collide and can be clicked.
- Changed Skeleton, Stray and Bogged NPCs to the vanilla hitbox height, they were slightly short.
- Changed the network protocol version, so client and server must run the same mod version.
### 7.12.1
- Fixed #836 by always showing "Restore", including datapack presets, with a reason tooltip.
- Fixed preset import and export messages missing, wrong or not warning about replaced NPCs.
- Fixed the preset browser reloading on each keystroke, leaking NPCs and clearing the selection.
- Fixed selection box drop-down lists being covered by the checkboxes and labels behind them.
- Fixed the preset list sorting, filter order and layout clipping options in small windows.
- Fixed
/easy_npc preset import datawithout a position importing it as a default preset. - Fixed spawn rate limit leaks, unstable preset IDs and "Spawn New" stacking NPCs on one spot.
- Changed "Restore" to refuse instead of spawning a copy when it is not permitted.
- Added sorting, a match count, reload, auto-close, the NPC ID and tooltips for presets and skins.
- Added
matching <pattern>batch imports with limits, a confirmation and a clickable position.
### 7.12.0
- Fixed #833 by showing Easy NPC Wand outlines only to the wand holder, owner and admins.
- Fixed #834 by adding "Set Home Here" and "Reset Home" buttons to the position configuration.
- Fixed #835 by keeping the NPC ID and position in exported presets, so imports restore the same
- Fixed preset imports and spawn eggs losing the owner's list entry and owner objectives.
- Fixed NPCs restored from an automatic backup losing their owner and becoming ownerless.
- Fixed selection lists showing only their first six entries and hiding the rest.
- Changed importing a preset to update the original NPC at its stored position instead of adding a
- Changed completed trades to play the "Trade completed" sound, which stayed silent before.
- Changed the API dialog call to report an unknown dialog label instead of always reporting success.
- Changed NPCs without arms to carry held items at the head or body instead of hiding them.
- Changed the optional Easy Model Entities dependency to require version 2.4.0 or newer.
- Added a "Sound" configuration with sounds for dialogs, speech, swimming, eating and fall damage.
- Added a searchable sound selection with volume and pitch sliders to the "Sound" configuration.
- Added a "Block Vehicles" option to keep NPCs out of boats, minecarts and modded chairs.
- Added the profession selection to all skin configurations and a new built-in skin per NPC type.
- Added client settings to hide name tags behind walls and
highlightEnabledfor wand outlines. - Added an "Exists" condition operation and API access to NPC movement, actions and presets.
### 7.11.0
- Fixed #828 by no longer freezing the server on logout when NPCs follow or watch the player.
- Fixed #831 by moving routine NPC removal messages to the debug log.
- Fixed #832 by making humanoid NPCs ignore custom player models, animations and poses.
- Fixed hourly NPC backups stuttering on large worlds and retaining timestamps of removed NPCs.
- Fixed hourly NPC backups losing the identity, owner and position of the backed-up NPC.
- Fixed owner-login restoration duplicating, repeatedly restoring, reviving or moving unloaded NPCs.
- Fixed NPC index and file synchronization issues causing lost NPCs, crashes or false warnings.
- Fixed stale NPC data after unloading, avoided redundant writes and added repeated-unload warnings.
- Fixed the preset browser failing to list custom and world presets saved in the SNBT format.
- Fixed speech bubbles losing their text and turning translucent with Iris shaders.
- Fixed the "Opacity" of an NPC being ignored while a shader pack is active.
- Fixed text formatting and macro parsing for translated speech bubbles and mod API texts.
- Fixed speech bubbles and their text staying hidden behind blocks while a shader pack is active.
- Added
minLightLevelto keep speech bubbles readable in dark surroundings.
### 7.10.0
- Fixed #829 by allowing bats and other non-walking mobs as the render entity of a Doppler NPC.
- Fixed NPCs rendered as a bat, frog or warden showing a static pose instead of their animation.
- Fixed the NPC name tag showing above the previews in the "Custom Models" configuration.
- Fixed speech bubbles being cut off by walls, doorframes and the NPC's own body.
- Fixed the previews in the "Custom Models" configuration.
- Changed the previews in the "Custom Models" configuration to stand on a common ground line.
- Changed overlapping speech bubbles to move apart and to stay visible when the NPC is off-screen.
- Changed "Navigation: Automatic" to use flying movement for NPCs rendered as a flying mob.
- Changed the render entity list to hide seats, paintings, thrown items and other non-mob entities.
- Added a "Min. hover height" slider for flying NPCs and client settings for speech bubbles.
### 7.9.0
- Fixed modded fish NPCs, like the ones of Tide 2, spinning around instead of swimming upright.
- Fixed "Navigation: Automatic" using ground movement for water NPCs and aquatic model NPCs.
- Fixed the "Random Swimming" objective never moving an NPC that uses aquatic navigation.
- Fixed a swimming NPC shaking or twitching in place instead of holding its tilt and swim depth.
- Fixed a swimming NPC turning in circles forever when it could not reach its next path point.
- Fixed an NPC that fell into water never getting out of it again.
- Fixed a following NPC searching a new path every tick while its target was unreachable.
- Fixed the "Move to" actions stopping short of a raised target or not starting while in the air.
- Fixed "Move back to Home" ignoring height differences and never returning from beyond 32 blocks.
- Fixed the "Opacity" input field being too narrow to show a value of 100.
- Fixed a damaged NPC with an Easy Model Entities model never flashing red.
- Changed modded water NPCs to swim level, vanilla water mobs keep their tilt as before.
- Changed the "Move to" actions to walk up to 48 blocks and to teleport only beyond that range.
- Changed "Move to" and "Move back to Home" to give up after three seconds without progress.
- Changed the timeout of a "Move to" action to count real ticks, it ran twice as long before.
- Changed a new "Random Swimming" objective to rank below following, fleeing and attack goals.
- Changed "Opacity" of an NPC with an Easy Model Entities model to be applied by that mod itself.
- Changed the minimum Easy Model Entities version to 2.3.0, older versions disable the integration.
- Added "Depth below surface" and "Height above floor" sliders for the swim level of an NPC.
- Added log entries for the NPC files written on a world save, with a warning above 250 ms each.
### 7.8.1
- Fixed #827 by rendering fish NPCs in water upright instead of always flopping on their side.
- Fixed #828 by keeping a damaged NPC from blocking the world save, it now falls back to defaults.
- Fixed a restored NPC picking up a random preset ID that changed with every save.
- Changed NPC data to only be written to disk when it actually changed.
### 7.8.0
- Fixed smaller text and UI issues.
- Changed an NPC that is already standing at its target position to finish the movement right away.
- Changed the "None" skin tab to "Advanced", which now holds "Disable Skin" and the texture field.
- Changed the minimum Easy Model Entities version to 2.2.0, older versions are no longer accepted.
- Added a "Move to" action, which sends an NPC to a position, a player, its owner or its home.
- Added a "Move to and Wait" action, which runs the following actions only after the arrival.
- Added an arrival radius, a timeout and an optional teleport to both move actions.
- Added an "Opacity" attribute from 0 to 100, which fades body, armor and hand items together.
- Added a "Set Opacity" action, which turns an NPC into a ghost or hides it completely.
- Added the "Lantern Wraith" preset, a ghost walking a square with a short line at every corner.
- Added API access to the move actions and the opacity of an NPC.
- Added a "Resource Location" skin type, which renders any texture of a mod or a resource pack.
- Added an "Advanced" skin tab, which previews the NPC with the entered texture before applying it.
### 7.7.7
- Fixed #821 by keeping the transparency of 64x64 skins, which Fresh Moves needs for its eyes. Skins
- Fixed #818 by running trade actions for Villager and Wandering Trader NPCs as well.
- Fixed a dialog with several text variants switching its speech bubble size every second.
- Fixed the skin cache storing the processed image instead of the original download.
- Fixed the untranslated interval names, like
PER_DAY, of the "Execution Limit" condition. - Fixed the
sitanimation of Easy Model NPCs, which never used the built-in sitting pose. - Fixed the speech bubble being cut off by the head of an NPC when a player stood close to it.
- Changed speech bubbles to keep their screen size and to move down or aside when a player is close.
- Changed the speech bubble text to render 20% larger than a name tag.
- Changed a time based action set with a "Wait" action to run in order instead of picking one entry.
- Changed dialog texts to wrap later, so an existing dialog can switch to the wider screen layout.
- Changed fallback actions to skip screen actions without a player, like the regular actions do.
- Changed the minimum Easy Model Entities version to 2.1.0, older versions disable the integration.
- Added a "Wait" action, which pauses the following actions of an event for a chosen duration.
- Added the "Countdown Timekeeper" preset, a speech bubble count to ten ending in sound and sparks.
- Added scaling and rotation for Doppler NPCs behind the "Experimental Features" checkbox. Both only
- Added a "Sound" action, which plays a sound at the NPC with sound category, volume and pitch.
- Added "Every 5 Minutes" and "Every 15 Minutes" to the "Execution Limit" condition.
- Added a "Player Idle" condition, which checks how long a player has not moved.
- Added an "Immovable" attribute, which keeps an NPC in place against pushing and knockback.
- Added
/easy_npc pauseto pause a single NPC or all NPCs; the global pause ends with the server. - Added API access to the sound action, the pause state and the idle time of a player.
- Added a texture override per model slot for Easy Model NPCs over
/easy_npc render texture. - Added a "Repeat" playback mode with a count and a time limit to the "Play Animation" action.
- Added API access to animation variants, texture slots and textures of Easy Model NPCs.
### 7.6.0
- Fixed unclear mod conflict errors for duplicate entity data tracker IDs.
- Fixed third-party health bars rendering over NPC previews in configuration and dialog screens.
- Fixed Doppler and Easy Model Entities NPCs using default hitboxes instead of their model size.
- Fixed the
/easy_npccommands suggesting no NPC UUIDs at all on a server. - Fixed the pose list of the "Set Pose" action drawing over its input field.
- Fixed the untranslated "Loop", "After current" and "Action Data Type" labels of the action editor.
- Fixed the missing hint text of the "Chance" condition.
- Fixed long condition hints running out of the editor screen instead of wrapping.
- Fixed the misaligned help icons and text buttons of the "Message" action.
- Fixed changes to the "Set Pose", "Play Animation" and "Stop Animation" actions not being saveable.
- Fixed the speech bubble text sitting closer to its upper border than to its lower one.
- Changed the NPC suggestions to list the crosshair NPC first and only own NPCs without permissions.
- Changed a preset export to only store what differs from a new NPC, without position or owner.
- Changed a preset without objectives or actions to fall back to the defaults of its NPC type.
- Changed events without a player, like "On Spawn" or "On Kill", to check their conditions. An
- Changed a time based action to pick the owner as
@initiatorwhenever the owner is nearby. - Changed speech bubbles to stay visible from 5 up to 18 seconds, depending on the text length.
- Changed the "Set Pose" action to only show its input field for the "custom" pose entry.
- Added time based actions on five fixed steps, from every ~1 second up to every ~15 minutes.
- Added a "Message" action for chat, system message and speech bubble text without a command.
- Added text variants, a sender name, a recipient and translation keys to the "Message" action.
- Added the speech bubble graphic as
easy_npc:textures/gui/speech_bubble.pngfor resource packs. - Added a "Chance" condition in percent and a "Relationship" condition for owner and faction.
- Added spawn, owner login, state change, day / night, weather and the missing "On Trade" events.
- Added a base preset per NPC type under
easy_npc:api/preset/base/, usable as a parent preset. - Added the "Wandering Companion" preset, a talkative NPC built from time based messages.
- Added an action registry, an action handler, a preset validator and richer event data for mods.
- Added a tooltip with name, type and distance to every NPC suggestion of the
/easy_npccommands. - Improved the NPC suggestions, which appear without typing and tolerate a near miss of one block.
### 7.5.0
- Fixed the home position of an NPC always reading as unset, which hid "Home" in the configuration
- Fixed NPCs spawned from a preset, the preset browser or a respawn never getting a home position.
- Fixed an NPC spawned from the preset browser keeping the home position of the world the preset was
- Fixed NPCs being drawn as a white silhouette with a shadow in the configuration, skin and preset
- Fixed #814 by giving every Cobblemon NPC its own animation state instead of one per species.
- Fixed #813 by letting "Move back to Home" work at any distance instead of only near its home.
- Fixed #812 by checking once per session whether a player changed their skin.
- Fixed #810 by accepting Cobblemon aspects of resource packs instead of only "shiny" and "female".
- Fixed the server crashing when an NPC with a "Tempt" objective ticked its goals.
- Fixed a single or boss spawner spawning without any limit when its preset carried no stored NPC.
- Fixed the "Legacy Easy NPC Data" warning appearing for newly created NPCs.
- Fixed missing transparency corrections for old 64x32 skins, which showed layer artifacts.
- Fixed the player skin screen freezing for a moment while a player name was looked up.
- Fixed the "Reset look at ..." objective label, which read "Reset loot at ..." in some languages.
- Fixed the "No Gravity" attribute being ignored after a preset import, which let NPCs fall.
- Fixed the Fabric game tests, which crashed on start because of the development helper mods.
- Fixed NPCs losing their owner when they were spawned again after a despawn.
- Fixed objectives being deleted from an NPC when the mod providing them was missing at start.
- Fixed importing a preset without a stored id, which spawned an NPC without owner and home.
- Fixed "Follow owner" and "Look at owner" keeping their old target after the owner was changed.
- Fixed attack targets staying assigned to an NPC after the targeted entity was gone.
- Fixed the "Look at Item" objective, which could be stored but never did anything.
- Fixed walking animation for Doppler NPC and 3rd party models.
- Fixed Forge never running its server start-up step, which left NPC tracking, factions and the
- Fixed Forge development runs starting without any mixins, which disabled the vanilla entity
- Changed the movement objectives to a fixed order: flee, follow, return home, then stroll. NPCs
- Changed inserting a preset into a vanilla monster spawner to keep its delay, count and range.
- Changed "Follow owner" and "Look at owner" without a chosen target to follow the owner of the NPC.
- Changed datapack presets to
easy_npc/preset/, the old folder still works, but only for easy_npc. - Changed the preset browser to always list its entries in the same order.
- Removed the experimental user-defined NPCs; the extra config file is no longer read or created.
- Removed the unused
SERVER_SKINskin type. - Added new gametest strcuture to support gametest in 1.21.11 and higher.
- Added a reload button to each entry of the player skin screen, to fetch a single skin again.
- Added the reason to the log whenever an NPC is removed, so an unexpected despawn can be traced.
- Added suggestions to
/easy_npc render set species. - Added support for presets from other mods, which no longer have to use the
easy_npcnamespace. - Added a preset visibility that hides a preset from the preset browser and the NPC screens.
- Added a teleport distance and a resting spot offset to the follow objectives.
- Added item tags, a "can be scared" option and a "only without owner" option to "Follow item".
- Added an item field to the look objectives, so an NPC can watch a chosen dropped item.
- Added an identifier per NPC, so a mod can find its own NPCs again.
- Added an option to spawn an NPC again when its owner logs in.
- Added game tests for NeoForge, which had none, and restored the spawn egg, dialog screen, data
- Added game tests for every configuration and editor screen, covering all three mod loaders.
- Added game tests for the home position, covering the spawn default, the stored value and
- Improved the model name parsing, which mistook a species ending in "_shiny" for a variant.
- Improved following of flying NPCs, which now steer directly when there is no path through the air.
- Improved third party support with an API for presets, own objectives and objective configuration.
### 7.4.0
- Fixed #807 by no longer pulling every same-type NPC within 32 blocks into a "Defend Self" fight.
- Fixed #805 by evaluating all visibility settings together instead of stopping at the first one.
- Fixed #804 by keeping the custom name on Doppler NPCs for name based textures and the name tag.
- Fixed #803 by adjusting assets to match typical Minecraft style instead of generic UI style.
- Fixed the day and night detection, which counted sunrise as night and sunset as day.
- Fixed the visibility in the Nether and the End, which used the Overworld time.
- Fixed the time and game mode visibility checkboxes appearing in a random order.
- Fixed game tests only being able to fail on their first assertion, which hid later failures.
- Fixed the "Saddled" horse skin variants, which never showed a saddle.
- Changed "Visible to Owner" and "Visible to Team" to also follow day, night and game mode.
- Changed Evoker, Illusioner and Vindicator variants without "Crossed Arms" to keep their arms down.
- Added a "Defend Faction" objective that attacks whoever hurt a nearby faction member or player.
- Added a system message when faction members fight each other and the faction stays out of it.
- Added a head equipment slot for Illagers so their captain banner can be removed or swapped.
- Added a day and night preview to the display configuration screen.
- Added unit and game tests for the visibility attributes and the faction defense.
- Improved the visibility check performance by reading the display attributes only once per check.
- Improved display attributes from older versions by completing them with their defaults.
- Improved the attack objective screen by disabling "Protect Owner" and "Defend Faction" when unset.
### 7.3.0
- Improved skin variants by carrying their data as typed fields instead of parsing variant names.
- Centralized the Cobblemon mod id and default model on shared constants.
- Reduced duplicated enum code with a shared
EnumUtilshelper forget(String)lookups. - Optimized villager profession and type lookups to use direct registry keys instead of scans.
- Optimized enum name lookups by caching tag names, ids and keys once at construction.
- Added unit and game tests for skin variants, villager resolution and the enum helper.
### 7.1.2
- Fixed #801 by using combination for NPC, Dialog and Action UUIDs to avoid collisions for action
### 7.1.1
- Fixed #800 by lazy loading entity types.
- Fixed #799 by fixing edge cases and adding additional documentation and better log messages.
- Fixed #798 by considering console, commands and command blocks as trusted command sources.
- Fixed a critical single-player / LAN issue where client and server NPCs shared the same registry.
- Fixed a memory leak in the configuration menu handling and added timeout and disconnect cleanup.
- Fixed duplicate downloads when several NPCs request the same skin at the same time.
- Fixed skin lookups failing after a error so a slow server no longer freezes the game.
- Fixed the URL skin screen freezing the game while checking a remote image; the check now runs in
- Added a new World Spawner block that limits an NPC preset across the whole world (all dimensions),
- Hardened remote skin downloads with a strict size limit and safe redirect handling to prevent
blockPrivateAddresses setting.- Improved server performance by only sending entity and player load events to NPCs that actually
### 7.0.0
- Fixed #794 by using the expected type for NPC rendering.
- Fixed scaling screen preview by pinning the entity feet to the 0 line of the scale ruler, so NPCs
box updates.
- Fixed #791 by adding Wandering Trader NPC type.
- Fixed #788 by extending the AI safeguards to Epic Fight and raw NPC variants (Piglin, Villager,
- Fixed #787, #531, #237 and #184 by adding a faction system with
/easy_npc factioncommands,
- Fixed #787, #771 and #572 by adding a new
targetobjectives tab to attack hostile factions or
- Fixed #786 by adding gender and shiny model variants for Cobblemon NPCs, searchable via
female
shiny in the model selection.- Fixed faction combat between invulnerable NPCs by adding the new
Attackable by Factionscombat
- Fixed Cobblemon model selection previews for oversized species by scaling with Cobblemon's own
- Fixed faction management edge cases by validating faction names, sorting faction lists and
- Fixed custom skin reloads by loading and clearing texture caches per skin model instead of always
- Improved the
Attackable by Players/Monsters/Factionscombat attributes to work independently of
Invulnerable, each opening a targeted hole for its own attacker group.- Improved preset command and network handling by splitting the large handlers into smaller focused
- Added Easy Model Entities Support.
- Added faction manager and faction editor screens to create, color and delete factions and manage
FACTION_MANAGEMENT security feature.- Added new
Miscattributes tab as home for the NPC faction assignment. - Added reusable warning and help icon components for inline hints with tooltips.
- Added additional unit and game tests for factions, target objectives and Cobblemon model variants.
### 6.25.0
- Fixed #782, #636, #622 by preserving data components during validations.
- Fixed #780 by caching remote texture downloads and reducing duplicate registrations.
- Fixed #767 by clamping attribute sliders against extreme values from other mods.
- Fixed #754 by adding custom data item matching for NPCs with actions and conditions.
- Fixed texture manager running in the wrong thread may cause crashes and deadlocks in >= 1.21.x.
- Fixed empty UUID handling for action conditions.
- Fixed execution limit reset for actions.
- Added texture registration queue to avoid multiple simultaneous downloads in the same tick.
- Added NPC coin, key and red token as consumable items for NPCs with actions and conditions.
- Added
Welcome Coin Traderas example NPC preset with custom coin, key and red token item data. - Added attribute safeguards against extreme values from other mods.
- Increased fallback max health value from 1024 to 4096 for high-health NPCs.
- Improved texture manager by reducing duplicate texture checks and registrations.
### 6.24.0
- Fixed #459, #775 by adding an option to block interactions with invisible NPCs.
- Fixed #774 startup crash related to optional Epic Fight and Cobblemon entity type maps.
- Fixed #773 by checking timed trade resets during base ticks and before opening trade screens.
- Fixed trade reset timing by increasing internal tickers correctly.
- Added time of day and weather conditions for #459.
- Added additional unit and game tests for trade resets, ticker handling and entity attributes.
- Added
Skywatch Scoutas example NPC preset with time of day and weather conditions.
### 6.23.0
- Fixed #774 by migrating isSunBurnTick error to 26.x.
- Fixed #772 by adjusting texture retries with 403 and 404 errors and lowering logging.
- Fixed #770 item rendering for Epic Fight NPCs (Evoker, Pillager, Vindicator and humanoid skins).
- Fixed #769 door loops with NPCs not reliably opening or closing doors.
- Fixed #760 by adding a dialog option and config setting (buttonConditionMode: LOCK or HIDE) to
- Fixed #709 by adding color picker popup for names with 32 colors and/or a manual RGB/hex value.
- Fixed NPC name color being reset when renaming without a specified color by preserving the
- Improved the door movement attributes so "Pass Door" is automatically enabled while "Open Door"
### 6.22.0
- Fixed #766 by passing the full server player context to command execution for better compatibility
- Fixed #764 by adding entity health, npc health conditions and NPC preset
Grukk, the Sparring Post as example for using these conditions.- Fixed #763 by making sure dialog button execution limits are now recorded.
- Fixed #758 by providing a example NPC preset named
One Wish Companion. - Fixed crashes related to 3rd party villager AI reading non-registered brain memories on Easy NPC
- Fixed Dialog buttons are not locked for server-side data as preparation for #760 and #644.
- Fixed #628 by adding conditional dialog opening support / command for better control over when
- Added brain AI for Piglin and Piglin Brute NPCs and registered the full vanilla brain memory set.
- Added additional guns to the gun tag for #757.
- Added a new "Open Dialog (Conditional)" action that opens a named dialog only if its conditions
- Added new entity health and npc health conditions for actions, dialogs and dialogs buttons.
- Added Piglin, Piglin Brute and Zombified Piglin NPCs invulnerable, for consistency with other
- Added a new "Knockback Immunity" combat attribute that prevents the NPC from being knocked back by
- Added a new "Explosion Immunity" combat attribute that makes the NPC immune to explosion damage
- Moved the "Projectile Collision" attribute to the Combat attribute screen, where it fits better
### 6.21.0
- Fixed item attachment for Illagers in crossed-arms pose.
- Fixed broken illager crossbow attack goal.
- Fixed crashes related to 3rd party items which are not renderable as hand items #756.
- Fixed crashes related to 3rd party mixins trying to access non-existing model parts #756.
- Fixed log.info spam message by reducing log verbosity and adding additional checks for custom
- Improved EasyNPCModelManager performance.
- Refactored NPC renderers to remove default hand item layer.
### 6.20.0
- Fixed crashes related to 3rd mods trying to access non-existing NPCs goals.
### 6.19.0
Note: This update adjusted the dialog background images by 10x6 pixels, which may require users to
adjust their custom dialog backgrounds if they are using custom ones.
- Fixed #752, #130 by adding dialog button condition support to allow to disable buttons.
- Fixed #683, #215 by adding typewriter effect support for dialog text.
- Fixed #690, #309 by allowing conditions for dialog, dialog buttons and interactions.
- Fixed smaller UI issues with dialog screen layout and background.
- Refactored dialog background images by 10x6 pixels on each side.
- Refactored dialog screen layout to better fit the new background size and improve appearance.
- Added typewriter effect and client configuration for dialog text.
- Added condition symbols to indicate the condition status for dialog, buttons and interactions.
- Added amount field for item conditions to allow checking for specific amounts of items.
- Added
Threshold Wardenas example NPC preset with various conditions and actions. - Added smaller bug fixes and optimizations related to dialog conditions and button states.
### 6.18.0
Note: This update changes the internal data format for conditions and actions, which may reset /
remove legacy existing execution-limit entries without stored IDs.
- Fixed #745 by adding conditions for actions to allow more complex and dynamic behavior.
- Fixed #652 by adding dialog button tooltip for longer texts.
- Fixed #687 by adding command value tooltip to show the full value.
- Added Experience Level conditions.
- Added Game-mode conditions.
- Added has item in inventory condition.
- Added has item in hand condition with (main hand and off-hand) support.
- Added player health condition.
- Added player tag condition.
- Added player team condition.
- Added Goldmere example NPC preset with various conditions and actions.
- Added negative condition support to allow negating conditions for more complex logic.
- Removed parameter pseudo IDs for
ActionDataEntryand replaced them with random UUIDs. - Refactored condition system to allow more condition types.
### 6.17.0
- Fixed #738 by adding additional tooltips for "Execute as player"
- Fixed to detailed logs by reducing log.info messages during startup and in-game.
- Added additional unit and game-tests.
### 6.16.0
- Fixed #732 by providing option to disable ESC key and close button for dialogs.
- Fixed #723 by avoid auto-close in specific cases like trading screens.
- Added general dialog configuration options to allow users to customize dialog behavior.
- Added avatar scaling and position offset options for dialogs.
- Added missing translation keys.
### 6.15.1
- Fixed #735 by extending the correct base class.
- Fixed several 26.1.2 specific issues from manual spawn testing.
### 6.15.0 (Trades, Player Heads, Epic Fight and QOL updates)
- Fixed #731 by resyncing species data, if species list is empty on the client.
- Fixed #730 by improving Epic Fight integration and enabled experimental features.
- Fixed #729 by making sure trade uses are stored correctly.
- Fixed #728 by adding custom head support for player heads.
- Fixed #689 by showing remaining trade uses and allow resetting manually and automatically.
- Fixed #218 and #132 with new trade configuration screen and better support for custom trades.
- Fixed trade specific edge by switching between basic and normal/advanced trading mode.
- Fixed dialog button text is truncated with tooltip showing the full text.
- Fixed Cobblemon animation issues by syncing animation state with Cobblemon Animation System.
- Added per trade specific actions to allow users triggering actions after buys.
- Added trade reset button to reset all trades easily.
- Added trade usage information to trade configuration screen.
- Added experimental feature state to allow users to manually enable experimental features.
- Added Griselda Grindstone as example trader with actions.
- Cleanup test files.
### 6.14.0
- Fixed #727 by making sure changes are synced to the client when changing values.
- Fixed #726 by adding additional allow lists for specific commands.
- Fixed #686, #389, #304, #211 by adding basic Cobblemon support with Cobblemon NPC.
- Fixed dialog misalignment and navigation issues by adjusting dialog sprites and screens.
- Fixed x and z root rotation by correcting rotation logic and pivot calculations.
- Added basic Cobblemon support with custom NPC type and model for testing.
### 6.13.0 (Security and Permissions Updates)
Notes: This update includes better security checks and permissions for multiplayer environments. It
allows to execute server commands which can be potentially dangerous if used with malicious intent.
- The update splits the model root data and logic from the rest of the model part data and logic,
- Fixed #725 by separating model root data and logic from the rest of the model part data and logic.
- Fixed #722 by supporting .sbnt files as local presets.
- Fixed #675 by adding dedicated assets for dialog and config screen backgrounds.
- Fixed #605, #532, #529 with new security checks and permissions system.
- Fixed #469, #311 by adding experimental api documentation and examples for custom model support.
- Fixed double rendering of config screen background by removing redundant background rendering.
- Fixed Ghast and Slime hitbox and name tag position issues by adjusting bounding box.
- ⚠️ Added security checks to prevent potential exploits and allow safe usage in multiplayer
- Replaced dynamic dialog screen background with a static one for better performance, customization
- Replaced dynamic config screen background with a static one for better performance.
- Refactored config-ui specific components and removed them from the core mod.
- Removed duplicated sprite sheets.
- Prepare permission system for possible Luck Perms integration in the future like #712.
- General code cleanup and optimizations related to config screen rendering and assets.
### 6.12.0
- Fixed #714 by adding additional checks for custom model part list based on vanilla models.
- Fixed #713 by reducing log verbosity with downgraded per-NPC INFO messages to DEBUG and
- Fixed #711 by reduced oversized startup/config log output.
- Fixed NBT validation guard to prevent unnecessary buffer allocations in production.
- Added model part name constants to EasyNPCModelManager for consistent usage across mixins.
- Improved RenderEntityTypeSupportConfig by enhancing filter logic and optimizing data structures
- Removed verbose debug logs that dump large data structures.
### 6.11.1
- Fixed #710 by improving backward-compatible parsing for recoverable trade data.
### 6.11.0
- Fixed #703 rendering issue with new custom layer system and hand renderings.
- Fixed #701 by adding additional safeguards and logging for invalid trading offers.
- Fixed smart animation not working properly with modified head position.
- Fixed head tracking by moving player detection back to server side-only.
- Fixed CustomLookAtPlayerGoal to better handle edge cases and reduce jitter.
- Fixed issue with Doppler NPCs keeping their hand inventory.
- Improved PoseManager logging message.
- Updated logo with a new design.
### 6.10.0
- Fixed #698 by adding try and catch for 3rd party entity creation.
- Fixed #695 by clearing model part rotations/positions when switching to a
DEFAULTvanilla pose. - Fixed #695 by applying lock rotation and pose animation only when the NPC is idle.
- Fixed #695 by correcting root rotation pivot to use actual bounding box height instead of 0.5f.
- Fixed multiple objective registration issues including inverted
isTargetedPlayercheck, wrong
targets.
- Fixed goal reference being retained after objective is unregistered.
- Removed auto-lock of ROOT rotation when loading poses; root lock is now user-controlled.
- Added lock rotation checkbox to the advanced and custom pose configuration screens.
- Added model-specific pose key filtering in
ConfigurationMenuHandlerfor the default pose screen. - Added unit tests for
CustomPosition,CustomRotation,CustomScale,ModelPose,
ModelAnimationBehavior and ModelAnimationData.- Added
NPCDataIsolationTestHelperand game tests for Fabric and Forge. - Increased max head yaw range from 60° to 65°.
### 6.9.0
- Fixed #692, #666 by adding caching and safeguards to prevent redundant retriggering of NPC entity
- Fixed #651, #617 by adding basic custom poses for all supported NPC types.
- Fixed #597 by adding additional Flee goals for fleeing from players, villagers, monsters, ...
- Fixed pose loading to read directly from mod resources instead of copying files to disk.
- Fixed duplicate
saveNPCcalls on entity join by checking existing registry entry first. - Added
despawnandspawncommands to remove and re-spawn NPCs by UUID with configurable removal
- Added
ModelPoseAPIandEasyNPCEntityHandlerpublic API classes for controlling NPC poses and
- Added pose data files for all supported NPC types.
- Added lock rotation checkbox to the basic pose configuration screen.
- Added
MoveToPositionGoalto move an NPC to a position before executing a callback action. - Added
EasyNPCLookControlandEasyNPCBodyRotationControlto respect locked root rotation. - Added synced owner change and dimension change to the NPC entity data index.
- Added EasyNPCItemAttachmentLayer into various entity renderers.
- Added dedicated
Flee Objectiveconfiguration tab with objectives for fleeing creepers, monsters,
- Added
FOLLOW_ITEMobjective to the follow objectives tab to make NPCs follow item entities by
minecraft:apple).- Added
LookAtEntityByUUIDGoaland enabled the look-at-entity-by-UUID and look-at-owner objectives
- Added
persistentflag toSynchedDataIndexso that transient indices (e.g. crossbow charge,
- Added configurable
customParticlesEnabledflag toSlimeBasefor API consumers. - Added
SoundType.PETand mappedCAT_PURRto the cat NPC for tamed ambient sound variety. - Reduced log verbosity for periodic NPC save operations from INFO to DEBUG.
### 6.8.3
- Fixed #680 by enforcing version miss-match by upgrading network protocol version.
- Fixed #679 by resetting position, rotation and size for name tag.
- Fixed #665 by adding multi state slide for root rotations.
- Fixed #664 by adding option to disable following mouse cursor for easier posing.
- Fixed #663 by improve support for X and Z root rotations.
- Fixed #661 by adding quick rotation with NPC wand and sneaking to the NPC to rotate the root to
- Fixed move tool is wrongly triggering interactions by adding check for move tool in interaction
- Fixed Preset Item is wrongly triggering interactions by adding check for preset item in
- Fixed Slime and Ghast hitbox and name tag position issues by adjusting bounding box and eye height
- Fixed Slime and Ghast GUI position by adjusting offset values.
### 6.8.2
- Fixed #677 by extending
SafeMerchantDatawith notifyTrade to avoid crashes. - Added progression data support for leveling up NPCs based on player interactions and actions.
- Added global NPC tracking system for better management and debugging of NPCs across the world.
- Added
OriginalModelConfig.withVariantTexture()option to allow using variant textures with the
### 6.8.1
- Fixed #676 by using existing preset helper method instead of custom one.
### 6.8.0 (Adding API support)
- Fixed #667 by adding warning messages and additional checks for invalid network packets.
- Fixed Horse spawn eggs model.
- Fixed pose support for allay, chicken, creeper, fox, ghast, horse, illager, iron golem, slime and
- Added NPC base classes for better API support.
- Added NPC raw classes for advanced API support.
- Added Slim and Ghast NPC types.
- Added Custom Model API for easier integration with other mods and custom models.
- Refactored internal data handling and registration for better maintainability and future
### 6.7.1
- Fixed #657 and #656 by adding additional client side checks for vanilla bug.
### 6.7.0
- Fixed #650 by implementing Wolf Leg Animations in setupAnim method.
- Fixed #648 by fixing canBeHitByProjectiles translation.
- Fixed #645 by adding
allowBypassInvulnerabilityconfig option to allow/deny bypassing
- Fixed delete button showing label even with small width.
- Fixed up and down buttons not positioned correctly in some cases.
- Fixed name tag showing up for dialog and configuration UI.
- Fixed distance action issue were multiple actions are not properly triggered.
- Fixed issues with NPC presets.
- Fixed Cat NPC and Wolf NPC owner data not syncing properly.
- Added preset browser for easier selection of common NPC presets.
- Added preset .snbt (text) export and import functionality for sharing NPC presets.
- Refactored existing NPC presets to use new .snbt format.
- Refactored spawner system to use new preset format for better maintainability and future
### 6.6.2
- Fixed #643 by rework scaling system.
- Fixed scaling not properly updating hitbox and nametag position after restart / reload.
- Added MID and MOUSE_OVER name tag visibility modes for finer control over NPC name display.
- Added team-based name tag visibility support respecting vanilla Team.
### 6.6.1
- Fixed #638 by refactored internal data handling for display attributes.
### 6.6.0
- Fixed #634 by implementing asynchronous texture loading with dedicated thread pool.
- Fixed texture loading blocking render thread causing game freezes.
- Fixed race conditions in texture reload protection using atomic operations.
- Fixed resource leaks in HTTP connections during remote texture downloads.
- Fixed URL validation spam allowing multiple simultaneous downloads of the same texture.
- Fixed exception handling for remote image validation preventing crashes on invalid URLs.
- Fixed
defineId called for:warning messages during NPC loading. - Refactored texture loading architecture with multi-level defense and rate limiting.
- Refactored entity data registration logic for better maintainability.
- Converted data classes to modern Java records for better immutability and thread-safety.
- Added thread-safe session server spam protection with ConcurrentHashMap.
- Added comprehensive error recovery with automatic cooldown reset on failures.
- Improved texture loading with 2-thread pool and 500ms rate limiting.
- Improved exception handling with specific catch blocks for IIOException and FileNotFoundException.
### 6.5.2
- Fixed Villager profession and job skin issue.
- Improved GitHub workflows by adding cache for gradle dependencies.
- Improved Gradle build time and cleanup tasks.
### 6.5.1
- Fixed #632 by implementing ON_KILL action type and event.
- Fixed #629 by improving texture handling performance, caching, and memory usage.
- Fixed kill command is not working on NPCs.
- Fixed texture reload protection preventing cache reload after eviction.
- Fixed WebP validation bug in remote image validator (missing return statement).
- Refactored texture handling logic for better maintainability and future improvements.
- Added time-based reload protection (60 seconds) to replace permanent blocking mechanism.
- Added missing variant textures for chicken, pig and wolf.
- Added additional unit tests for texture handling.
- Improved gradle build tasks.
### 6.5.0
- ⚠️ Removed jar-in-jar bundle approach for better mod compatibility and api capabilities.
- Fixed #627 scissor implementation for better compatibility with other mods.
- Fixed #625 lively animation issues when using rotated or moved model parts.
- Fixed default animation are canceled when using scaled model parts.
- Added better pose animation control with smart, default und none options.
### 6.4.1
- Fixed #626 screen switching logic for different NPC UUIDs, thanks to
Spawnbladefor the detailed
### 6.4.0
- Fixed #626 by improving dialog data validation and error handling.
- Fixed #623 by refactoring render data and render handling.
- Fixed #622 by making sure custom data are properly saved and loaded.
- Fixed open dialog action type to allow opening dialogs from other NPCs.
- Fixed hashing issues by adding missing equals and hashCode methods for ConditionDataSet and
- Added custom data test item for #622 and easier testing of custom data.
- Improved records and fixed potential issues with missing data.
### 6.3.0
- Refactored config ui specific components and removed them from the core mod.
- Fixed dialog data by filtering dialog data before sending to the client.
- Fixed dialog editor layout issues and improved usability.
- Fixed missing default values for some dialog data fields.
- Added dialog priority support to control the order of dialog execution.
- Added condition support for dialog and scoreboard actions.
- Added frequency support for dialog to limit how often an dialog can be shown.
- Added new NPC preset to for scoreboard and condition support.
- Improved dialog button data format by removing redundant fields.
### 6.2.0
- Fixed legacy custom name parsing.
- Fixed string injection within dialogs.
- Fixed missing translation for action types.
- Added scoreboard action type to increase, decrease, set scoreboard values.
- Added
@score(...)NPC macro to display scoreboard values in the dialog. - Added additional unit tests.
- Improved spin button with indicators and better usability.
### 6.1.2
- Fixed container and menu sync issues with missing close container packets.
- Fixed close button not working in some cases.
- Fixed jumping mouse cursor between screen transitions.
- Fixed translation files and removed duplicate and deprecated entries.
- Moved Easy NPC wand to existing core item tab instead of creating a new one.
- Added cat pose support for different model parts (except tail).
- Improved EasyNPCWand glowing effect performance by disabling it when not needed.
- Improved custom entity detection by excluding non-living entities like displays, makers, throwns
- Improved cat variant handling.
### 6.1.1
- Fixed #615 by checking if item is equipped in one of the hands.
- Fixed #612 by re-validating entity types.
- Fixed #610 by force sync of hat and head layers for specific models.
- Fixed orc textures.
- Fixed cat variant handling for 1.21.5.
- Fixed player render by adjusting render state
skinfield. - Fixed cat renderer by adjusting render state
texturefield. - Fixed position, scaling and rotation preview.
- Fixed Fairy model.
- Improved custom model support and performance, by moving related logic into to client side only.
- Improved caching of player to UUID mappings for player skins.
- Limited change model commands and logic to Doppler NPCs only.
- Added renderEntityRaw method to render NPC as-it-is.
### 6.1.0 ✨
This is a major release. Please back up your worlds and NPC data before updating. This version
contains many improvements, optimizations, and internal changes that are **not fully compatible**
with earlier releases.
⚠️ Breaking changes
- Existing NPCs and their configuration data from versions before 6.1.0 may not load correctly or
- Internal data formats and some behaviors have been refactored to support new use-cases.
🧩 New modular structure
Easy NPC is now split into three separate mods:
- Easy NPC** – Bundle that includes both Core and Configuration UI for a plug‑and‑play experience.
- Easy NPC: Core** – Lightweight runtime and logic for NPCs, with minimal dependencies. Intended
- Easy NPC: Configuration UI** – Standalone configuration interface for creating and editing NPCs.
🎯 Why this change?
- Allows servers and modpacks to ship only the **Core** mod on the server side for a leaner setup.
- Reduces memory usage and load times when the UI is not required everywhere.
- Makes development and testing faster by separating UI and core logic.
[history]: https://github.com/MarkusBordihn/BOs-Easy-NPC/commits/
[upgrade_guide]: https://github.com/MarkusBordihn/BOs-Easy-NPC/wiki/Upgrading
## Note
This change log includes the summarized changes. For the full changelog, please go to
the [GitHub History][history] instead.
Note: Please always back up your world / NPCs before updating to a new version!
Check the [upgrade guide][upgrade_guide] for more information.
### 7.14.0
- Fixed #846 by keeping custom poses for players who start seeing the NPC later.
- Fixed attribute and trading settings missing for players who start seeing the NPC later.
- Fixed changed max uses, XP and trading type not shown in the trading screens until reload.
- Fixed
/easy_npc sound setchanges not reaching players until the NPC was reloaded. - Added game tests that check NPC poses and settings after respawns and for new players.
### 7.13.0
- Fixed color and formatting tags in dialog button names showing as plain text.
- Fixed the button preview in the editor showing lowercase names as a raw translation key.
- Fixed the "Move EasyNPC" item not working for NPC owners outside of creative mode.
- Fixed
/easy_npc owner setreporting success even when the owner could not be changed. - Fixed the game crashing when the URL or player skin screen showed a skin download error.
- Fixed the preset browser search showing no results after scrolling down the list.
- Changed the network protocol version, so client and server must run the same mod version.
- Added
@initiator,@npcand@score()support to dialog button names to fix #841. - Added automatic client tests with the Client Runtime Interface Toolkit.
- Larger core refactoring and code cleanup.
### 7.12.2
- Fixed the Fairy hitbox being far too small, so its name tag and speech bubble sat in its body.
- Fixed scaled NPCs keeping their old hitbox and eye level, so hits, clicks and looking missed.
- Fixed oversized names, lists and NPC data in network packets being read without any limit.
- Fixed invalid NPC positions, scales, attributes, names and durations from being applied.
- Changed Fairy NPCs to take up the space of their model, so they collide and can be clicked.
- Changed Skeleton, Stray and Bogged NPCs to the vanilla hitbox height, they were slightly short.
- Changed the network protocol version, so client and server must run the same mod version.
### 7.12.1
- Fixed #836 by always showing "Restore", including datapack presets, with a reason tooltip.
- Fixed preset import and export messages missing, wrong or not warning about replaced NPCs.
- Fixed the preset browser reloading on each keystroke, leaking NPCs and clearing the selection.
- Fixed the preset list sorting, filter order and layout clipping options in small windows.
- Fixed
/easy_npc preset import datawithout a position importing it as a default preset. - Fixed spawn rate limit leaks, unstable preset IDs and "Spawn New" stacking NPCs on one spot.
- Changed "Restore" to refuse instead of spawning a copy when it is not permitted.
- Added sorting, a match count, reload, auto-close, the NPC ID and tooltips for presets and skins.
- Added
matching <pattern>batch imports with limits, a confirmation and a clickable position.
### 7.12.0
- Fixed #833 by showing Easy NPC Wand outlines only to the wand holder, owner and admins.
- Fixed #834 by adding "Set Home Here" and "Reset Home" buttons to the position configuration.
- Fixed #835 by keeping the NPC ID and position in exported presets, so imports restore the same
- Fixed preset imports and spawn eggs losing the owner's list entry and owner objectives.
- Fixed NPCs restored from an automatic backup losing their owner and becoming ownerless.
- Fixed selection lists showing only their first six entries and hiding the rest.
- Changed importing a preset to update the original NPC at its stored position instead of adding a
- Changed completed trades to play the "Trade completed" sound, which stayed silent before.
- Changed the API dialog call to report an unknown dialog label instead of always reporting success.
- Changed NPCs without arms to carry held items at the head or body instead of hiding them.
- Changed the optional Easy Model Entities dependency to require version 2.4.0 or newer.
- Added a "Sound" configuration with sounds for dialogs, speech, swimming, eating and fall damage.
- Added a searchable sound selection with volume and pitch sliders to the "Sound" configuration.
- Added a "Block Vehicles" option to keep NPCs out of boats, minecarts and modded chairs.
- Added the profession selection to all skin configurations and a new built-in skin per NPC type.
- Added client settings to hide name tags behind walls and
highlightEnabledfor wand outlines. - Added an "Exists" condition operation and API access to NPC movement, actions and presets.
### 7.11.0
- Fixed #828 by no longer freezing the server on logout when NPCs follow or watch the player.
- Fixed #831 by moving routine NPC removal messages to the debug log.
- Fixed #832 by making humanoid NPCs ignore custom player models, animations and poses.
- Fixed hourly NPC backups stuttering on large worlds and retaining timestamps of removed NPCs.
- Fixed hourly NPC backups losing the identity, owner and position of the backed-up NPC.
- Fixed owner-login restoration duplicating, repeatedly restoring, reviving or moving unloaded NPCs.
- Fixed NPC index and file synchronization issues causing lost NPCs, crashes or false warnings.
- Fixed stale NPC data after unloading, avoided redundant writes and added repeated-unload warnings.
- Fixed the preset browser failing to list custom and world presets saved in the SNBT format.
- Fixed speech bubbles losing their text and turning translucent with Iris shaders.
- Fixed the "Opacity" of an NPC being ignored while a shader pack is active.
- Fixed text formatting and macro parsing for translated speech bubbles and mod API texts.
- Fixed speech bubbles and their text staying hidden behind blocks while a shader pack is active.
- Added
minLightLevelto keep speech bubbles readable in dark surroundings.
### 7.10.0
- Fixed #829 by allowing bats and other non-walking mobs as the render entity of a Doppler NPC.
- Fixed NPCs rendered as a bat, frog or warden showing a static pose instead of their animation.
- Fixed the NPC name tag showing above the previews in the "Custom Models" configuration.
- Fixed speech bubbles being cut off by walls, doorframes and the NPC's own body.
- Fixed the previews in the "Custom Models" configuration.
- Changed the previews in the "Custom Models" configuration to stand on a common ground line.
- Changed overlapping speech bubbles to move apart and to stay visible when the NPC is off-screen.
- Changed "Navigation: Automatic" to use flying movement for NPCs rendered as a flying mob.
- Changed the render entity list to hide seats, paintings, thrown items and other non-mob entities.
- Added a "Min. hover height" slider for flying NPCs and client settings for speech bubbles.
### 7.9.0
- Fixed modded fish NPCs, like the ones of Tide 2, spinning around instead of swimming upright.
- Fixed "Navigation: Automatic" using ground movement for water NPCs and aquatic model NPCs.
- Fixed the "Random Swimming" objective never moving an NPC that uses aquatic navigation.
- Fixed a swimming NPC shaking or twitching in place instead of holding its tilt and swim depth.
- Fixed a swimming NPC turning in circles forever when it could not reach its next path point.
- Fixed an NPC that fell into water never getting out of it again.
- Fixed a following NPC searching a new path every tick while its target was unreachable.
- Fixed the "Move to" actions stopping short of a raised target or not starting while in the air.
- Fixed "Move back to Home" ignoring height differences and never returning from beyond 32 blocks.
- Fixed the "Opacity" input field being too narrow to show a value of 100.
- Fixed a damaged NPC with an Easy Model Entities model never flashing red.
- Changed modded water NPCs to swim level, vanilla water mobs keep their tilt as before.
- Changed the "Move to" actions to walk up to 48 blocks and to teleport only beyond that range.
- Changed "Move to" and "Move back to Home" to give up after three seconds without progress.
- Changed the timeout of a "Move to" action to count real ticks, it ran twice as long before.
- Changed a new "Random Swimming" objective to rank below following, fleeing and attack goals.
- Changed "Opacity" of an NPC with an Easy Model Entities model to be applied by that mod itself.
- Changed the minimum Easy Model Entities version to 2.3.0, older versions disable the integration.
- Added "Depth below surface" and "Height above floor" sliders for the swim level of an NPC.
- Added log entries for the NPC files written on a world save, with a warning above 250 ms each.
### 7.8.1
- Fixed #827 by rendering fish NPCs in water upright instead of always flopping on their side.
- Fixed #828 by keeping a damaged NPC from blocking the world save, it now falls back to defaults.
- Fixed a restored NPC picking up a random preset ID that changed with every save.
- Changed NPC data to only be written to disk when it actually changed.
### 7.8.0
- Fixed smaller text and UI issues.
- Changed an NPC that is already standing at its target position to finish the movement right away.
- Changed the "None" skin tab to "Advanced", which now holds "Disable Skin" and the texture field.
- Added a "Move to" action, which sends an NPC to a position, a player, its owner or its home.
- Added a "Move to and Wait" action, which runs the following actions only after the arrival.
- Added an arrival radius, a timeout and an optional teleport to both move actions.
- Added an "Opacity" attribute from 0 to 100, which fades body, armor and hand items together.
- Added a "Set Opacity" action, which turns an NPC into a ghost or hides it completely.
- Added the "Lantern Wraith" preset, a ghost walking a square with a short line at every corner.
- Added API access to the move actions and the opacity of an NPC.
- Added a "Resource Location" skin type, which renders any texture of a mod or a resource pack.
- Added an "Advanced" skin tab, which previews the NPC with the entered texture before applying it.
### 7.7.7
- Fixed #821 by keeping the transparency of 64x64 skins, which Fresh Moves needs for its eyes. Skins
- Fixed #818 by running trade actions for Villager and Wandering Trader NPCs as well.
- Fixed a dialog with several text variants switching its speech bubble size every second.
- Fixed the skin cache storing the processed image instead of the original download.
- Fixed the untranslated interval names, like
PER_DAY, of the "Execution Limit" condition. - Fixed the
sitanimation of Easy Model NPCs, which never used the built-in sitting pose. - Fixed the speech bubble being cut off by the head of an NPC when a player stood close to it.
- Changed speech bubbles to keep their screen size and to move down or aside when a player is close.
- Changed the speech bubble text to render 20% larger than a name tag.
- Changed a time based action set with a "Wait" action to run in order instead of picking one entry.
- Changed dialog texts to wrap later, so an existing dialog can switch to the wider screen layout.
- Changed fallback actions to skip screen actions without a player, like the regular actions do.
- Changed the minimum Easy Model Entities version to 2.1.0, older versions disable the integration.
- Added a "Wait" action, which pauses the following actions of an event for a chosen duration.
- Added the "Countdown Timekeeper" preset, a speech bubble count to ten ending in sound and sparks.
- Added scaling and rotation for Doppler NPCs behind the "Experimental Features" checkbox. Both only
- Added a "Sound" action, which plays a sound at the NPC with sound category, volume and pitch.
- Added "Every 5 Minutes" and "Every 15 Minutes" to the "Execution Limit" condition.
- Added a "Player Idle" condition, which checks how long a player has not moved.
- Added an "Immovable" attribute, which keeps an NPC in place against pushing and knockback.
- Added
/easy_npc pauseto pause a single NPC or all NPCs; the global pause ends with the server. - Added API access to the sound action, the pause state and the idle time of a player.
- Added a texture override per model slot for Easy Model NPCs over
/easy_npc render texture. - Added a "Repeat" playback mode with a count and a time limit to the "Play Animation" action.
- Added API access to animation variants, texture slots and textures of Easy Model NPCs.
### 7.6.0
- Fixed unclear mod conflict errors for duplicate entity data tracker IDs.
- Fixed third-party health bars rendering over NPC previews in configuration and dialog screens.
- Fixed Doppler and Easy Model Entities NPCs using default hitboxes instead of their model size.
- Fixed the
/easy_npccommands suggesting no NPC UUIDs at all on a server. - Fixed the pose list of the "Set Pose" action drawing over its input field.
- Fixed the untranslated "Loop", "After current" and "Action Data Type" labels of the action editor.
- Fixed the missing hint text of the "Chance" condition.
- Fixed long condition hints running out of the editor screen instead of wrapping.
- Fixed the misaligned help icons and text buttons of the "Message" action.
- Fixed changes to the "Set Pose", "Play Animation" and "Stop Animation" actions not being saveable.
- Fixed the speech bubble text sitting closer to its upper border than to its lower one.
- Changed the NPC suggestions to list the crosshair NPC first and only own NPCs without permissions.
- Changed a preset export to only store what differs from a new NPC, without position or owner.
- Changed a preset without objectives or actions to fall back to the defaults of its NPC type.
- Changed events without a player, like "On Spawn" or "On Kill", to check their conditions. An
- Changed a time based action to pick the owner as
@initiatorwhenever the owner is nearby. - Changed speech bubbles to stay visible from 5 up to 18 seconds, depending on the text length.
- Changed the "Set Pose" action to only show its input field for the "custom" pose entry.
- Added time based actions on five fixed steps, from every ~1 second up to every ~15 minutes.
- Added a "Message" action for chat, system message and speech bubble text without a command.
- Added text variants, a sender name, a recipient and translation keys to the "Message" action.
- Added the speech bubble graphic as
easy_npc:textures/gui/speech_bubble.pngfor resource packs. - Added a "Chance" condition in percent and a "Relationship" condition for owner and faction.
- Added spawn, owner login, state change, day / night, weather and the missing "On Trade" events.
- Added a base preset per NPC type under
easy_npc:api/preset/base/, usable as a parent preset. - Added the "Wandering Companion" preset, a talkative NPC built from time based messages.
- Added an action registry, an action handler, a preset validator and richer event data for mods.
- Added a tooltip with name, type and distance to every NPC suggestion of the
/easy_npccommands. - Improved the NPC suggestions, which appear without typing and tolerate a near miss of one block.
### 7.5.0
- Fixed the home position of an NPC always reading as unset, which hid "Home" in the configuration
- Fixed NPCs spawned from a preset, the preset browser or a respawn never getting a home position.
- Fixed an NPC spawned from the preset browser keeping the home position of the world the preset was
- Fixed NPCs being drawn as a white silhouette with a shadow in the configuration, skin and preset
- Fixed #814 by giving every Cobblemon NPC its own animation state instead of one per species.
- Fixed #813 by letting "Move back to Home" work at any distance instead of only near its home.
- Fixed #812 by checking once per session whether a player changed their skin.
- Fixed #810 by accepting Cobblemon aspects of resource packs instead of only "shiny" and "female".
- Fixed the server crashing when an NPC with a "Tempt" objective ticked its goals.
- Fixed flying NPCs like Allay, Vex and Ghast moving on the ground instead of flying.
- Fixed dialog, button, preset, pose and texture names with duplicates or special characters.
- Fixed conditions not being editable on a dedicated server and untranslated condition texts.
- Fixed Easy Model Entities NPCs not turning their head and their model list ignoring a
/reload. - Fixed the "Legacy Easy NPC Data" warning appearing for newly created NPCs.
- Fixed missing transparency corrections for old 64x32 skins, which showed layer artifacts.
- Fixed the player skin screen freezing for a moment while a player name was looked up.
- Fixed the "Reset look at ..." objective label, which read "Reset loot at ..." in some languages.
- Fixed the Fabric game tests, which crashed on start because of the development helper mods.
- Fixed NPCs losing their owner when they were spawned again after a despawn.
- Fixed objectives being deleted from an NPC when the mod providing them was missing at start.
- Fixed objectives being switched off for good when their target entity was missing.
- Fixed importing a preset without a stored id, which spawned an NPC without owner and home.
- Fixed "Follow owner" and "Look at owner" keeping their old target after the owner was changed.
- Fixed attack targets staying assigned to an NPC after the targeted entity was gone.
- Fixed the "Look at Item" objective, which could be stored but never did anything.
- Fixed walking animation for Doppler NPC and 3rd party models.
- Fixed Forge never running its server start-up step, which left NPC tracking, factions and the
- Fixed Forge development runs starting without any mixins, which disabled the vanilla entity
- Changed the movement objectives to a fixed order: flee, follow, return home, then stroll. NPCs
- Changed datapack presets to
easy_npc/preset/, the old folder still works, but only for easy_npc. - Changed the preset browser to always list its entries in the same order.
- Changed the required Easy Model Entities version to 1.7.0, floating models now hover by default.
- Removed the experimental user-defined NPCs; the extra config file is no longer read or created.
- Removed the unused
SERVER_SKINskin type. - Added new gametest strcuture to support gametest in 1.21.11 and higher.
- Added a reload button to each entry of the player skin screen, to fetch a single skin again.
- Added the reason to the log whenever an NPC is removed, so an unexpected despawn can be traced.
- Added suggestions to
/easy_npc render set species. - Added support for presets from other mods, which no longer have to use the
easy_npcnamespace. - Added a preset visibility that hides a preset from the preset browser and the NPC screens.
- Added a teleport distance and a resting spot offset to the follow objectives.
- Added item tags, a "can be scared" option and a "only without owner" option to "Follow item".
- Added an item field to the look objectives, so an NPC can watch a chosen dropped item.
- Added an identifier per NPC, so a mod can find its own NPCs again.
- Added an option to spawn an NPC again when its owner logs in.
- Added NPC states with number, yes/no and text values, usable as condition, action and command.
- Added a "Navigation" and a "Hover height" setting to switch any NPC between ground and flying.
- Added a parent preset reference, so a preset can build on another one and only override changes.
- Added the state driven "Forge Keeper" preset.
- Added custom conditions and dialog, action and state events for other mods.
- Added "On Far Distance" as a distance action, which triggers at 32 blocks.
- Added game tests for NeoForge, which had none, and restored the spawn egg, dialog screen, data
- Added game tests for every configuration and editor screen, covering all three mod loaders.
- Added game tests for the home position, covering the spawn default, the stored value and
- Improved the model name parsing, which mistook a species ending in "_shiny" for a variant.
- Improved following of flying NPCs, which now steer directly when there is no path through the air.
- Improved floating Easy Model Entities models, which now bob up and down.
- Improved third party support with an API for presets, own objectives and objective configuration.
### 7.4.0
- Fixed #807 by no longer pulling every same-type NPC within 32 blocks into a "Defend Self" fight.
- Fixed #805 by evaluating all visibility settings together instead of stopping at the first one.
- Fixed #804 by keeping the custom name on Doppler NPCs for name based textures and the name tag.
- Fixed #803 by adjusting assets to match typical Minecraft style instead of generic UI style.
- Fixed the day and night detection, which counted sunrise as night and sunset as day.
- Fixed the visibility in the Nether and the End, which used the Overworld time.
- Fixed the time and game mode visibility checkboxes appearing in a random order.
- Fixed game tests only being able to fail on their first assertion, which hid later failures.
- Fixed the "Saddled" horse skin variants, which never showed a saddle.
- Changed "Visible to Owner" and "Visible to Team" to also follow day, night and game mode.
- Changed Evoker, Illusioner and Vindicator variants without "Crossed Arms" to keep their arms down.
- Added a "Defend Faction" objective that attacks whoever hurt a nearby faction member or player.
- Added a system message when faction members fight each other and the faction stays out of it.
- Added a head equipment slot for Illagers so their captain banner can be removed or swapped.
- Added a day and night preview to the display configuration screen.
- Added unit and game tests for the visibility attributes and the faction defense.
- Improved the visibility check performance by reading the display attributes only once per check.
- Improved display attributes from older versions by completing them with their defaults.
- Improved the attack objective screen by disabling "Protect Owner" and "Defend Faction" when unset.
### 7.3.0
- Improved skin variants by carrying their data as typed fields instead of parsing variant names.
- Centralized the Cobblemon mod id and default model on shared constants.
- Reduced duplicated enum code with a shared
EnumUtilshelper forget(String)lookups. - Optimized villager profession and type lookups to use direct registry keys instead of scans.
- Optimized enum name lookups by caching tag names, ids and keys once at construction.
- Added unit and game tests for skin variants, villager resolution and the enum helper.
### 7.2.0
- Fixed #801 by using combination for NPC, Dialog and Action UUIDs to avoid collisions for action
### 7.1.1
- Fixed #800 by lazy loading entity types.
- Fixed #799 by fixing edge cases and adding additional documentation and better log messages.
- Fixed #798 by considering console, commands and command blocks as trusted command sources.
- Fixed a critical single-player / LAN issue where client and server NPCs shared the same registry.
- Fixed a memory leak in the configuration menu handling and added timeout and disconnect cleanup.
- Fixed duplicate downloads when several NPCs request the same skin at the same time.
- Fixed skin lookups failing after a error so a slow server no longer freezes the game.
- Fixed the URL skin screen freezing the game while checking a remote image; the check now runs in
- Added a new World Spawner block that limits an NPC preset across the whole world (all dimensions),
- Hardened remote skin downloads with a strict size limit and safe redirect handling to prevent
blockPrivateAddresses setting.- Improved server performance by only sending entity and player load events to NPCs that actually
### 7.0.0
- Fixed #794 by using the expected type for NPC rendering.
- Fixed #791 by adding Wandering Trader NPC type.
- Fixed #788 by extending the AI safeguards to Epic Fight and raw NPC variants (Piglin, Villager,
- Fixed #787, #531, #237 and #184 by adding a faction system with
/easy_npc factioncommands,
- Fixed #787, #771 and #572 by adding a new
targetobjectives tab to attack hostile factions or
- Fixed #786 by adding gender and shiny model variants for Cobblemon NPCs, searchable via
female
shiny in the model selection.- Fixed faction combat between invulnerable NPCs by adding the new
Attackable by Factionscombat
- Fixed Cobblemon model selection previews for oversized species by scaling with Cobblemon's own
- Fixed faction management edge cases by validating faction names, sorting faction lists and
- Fixed custom skin reloads by loading and clearing texture caches per skin model instead of always
- Improved the
Attackable by Players/Monsters/Factionscombat attributes to work independently of
Invulnerable, each opening a targeted hole for its own attacker group.- Improved preset command and network handling by splitting the large handlers into smaller focused
- Added Easy Model Entities Support.
- Added faction manager and faction editor screens to create, color and delete factions and manage
FACTION_MANAGEMENT security feature.- Added new
Miscattributes tab as home for the NPC faction assignment. - Added reusable warning and help icon components for inline hints with tooltips.
- Added additional unit and game tests for factions, target objectives and Cobblemon model variants.
### 6.25.0
- Fixed #782, #636, #622 by preserving data components during validations.
- Fixed #780 by caching remote texture downloads and reducing duplicate registrations.
- Fixed #767 by clamping attribute sliders against extreme values from other mods.
- Fixed #754 by adding custom data item matching for NPCs with actions and conditions.
- Fixed texture manager running in the wrong thread may cause crashes and deadlocks in >= 1.21.x.
- Fixed empty UUID handling for action conditions.
- Fixed execution limit reset for actions.
- Added texture registration queue to avoid multiple simultaneous downloads in the same tick.
- Added NPC coin, key and red token as consumable items for NPCs with actions and conditions.
- Added
Welcome Coin Traderas example NPC preset with custom coin, key and red token item data. - Added attribute safeguards against extreme values from other mods.
- Increased fallback max health value from 1024 to 4096 for high-health NPCs.
- Improved texture manager by reducing duplicate texture checks and registrations.
### 6.24.0
- Fixed #459, #775 by adding an option to block interactions with invisible NPCs.
- Fixed #774 startup crash related to optional Epic Fight and Cobblemon entity type maps.
- Fixed #773 by checking timed trade resets during base ticks and before opening trade screens.
- Fixed trade reset timing by increasing internal tickers correctly.
- Added time of day and weather conditions for #459.
- Added additional unit and game tests for trade resets, ticker handling and entity attributes.
- Added
Skywatch Scoutas example NPC preset with time of day and weather conditions.
### 6.23.0
- Fixed #772 by adjusting texture retries with 403 and 404 errors and lowering logging.
- Fixed #770 item rendering for Epic Fight NPCs (Evoker, Pillager, Vindicator and humanoid skins).
- Fixed #769 door loops with NPCs not reliably opening or closing doors.
- Fixed #760 by adding a dialog option and config setting (buttonConditionMode: LOCK or HIDE) to
- Fixed #709 by adding color picker popup for names with 32 colors and/or a manual RGB/hex value.
- Fixed NPC name color being reset when renaming without a specified color by preserving the
- Improved the door movement attributes so "Pass Door" is automatically enabled while "Open Door"
### 6.22.0
- Fixed #766 by passing the full server player context to command execution for better compatibility
- Fixed #764 by adding entity health, npc health conditions and NPC preset
Grukk, the Sparring Post as example for using these conditions.- Fixed #763 by making sure dialog button execution limits are now recorded.
- Fixed #758 by providing a example NPC preset named
One Wish Companion. - Fixed crashes related to 3rd party villager AI reading non-registered brain memories on Easy NPC
- Fixed Dialog buttons are not locked for server-side data as preparation for #760 and #644.
- Fixed #628 by adding conditional dialog opening support / command for better control over when
- Added brain AI for Piglin and Piglin Brute NPCs and registered the full vanilla brain memory set.
- Added additional guns to the gun tag for #757.
- Added a new "Open Dialog (Conditional)" action that opens a named dialog only if its conditions
- Added new entity health and npc health conditions for actions, dialogs and dialogs buttons.
- Added Piglin, Piglin Brute and Zombified Piglin NPCs invulnerable, for consistency with other
- Added a new "Knockback Immunity" combat attribute that prevents the NPC from being knocked back by
- Added a new "Explosion Immunity" combat attribute that makes the NPC immune to explosion damage
- Moved the "Projectile Collision" attribute to the Combat attribute screen, where it fits better
### 6.21.0
- Fixed item attachment for Illagers in crossed-arms pose.
- Fixed broken illager crossbow attack goal.
- Fixed crashes related to 3rd party items which are not renderable as hand items #756.
- Fixed crashes related to 3rd party mixins trying to access non-existing model parts #756.
- Fixed log.info spam message by reducing log verbosity and adding additional checks for custom
- Improved EasyNPCModelManager performance.
- Refactored NPC renderers to remove default hand item layer.
### 6.20.0
- Fixed crashes related to 3rd mods trying to access non-existing NPCs goals.
### 6.19.0
Note: This update adjusted the dialog background images by 10x6 pixels, which may require users to
adjust their custom dialog backgrounds if they are using custom ones.
- Fixed #752, #130 by adding dialog button condition support to allow to disable buttons.
- Fixed #683, #215 by adding typewriter effect support for dialog text.
- Fixed #690, #309 by allowing conditions for dialog, dialog buttons and interactions.
- Fixed smaller UI issues with dialog screen layout and background.
- Refactored dialog background images by 10x6 pixels on each side.
- Refactored dialog screen layout to better fit the new background size and improve appearance.
- Added typewriter effect and client configuration for dialog text.
- Added condition symbols to indicate the condition status for dialog, buttons and interactions.
- Added amount field for item conditions to allow checking for specific amounts of items.
- Added
Threshold Wardenas example NPC preset with various conditions and actions. - Added smaller bug fixes and optimizations related to dialog conditions and button states.
### 6.18.0
Note: This update changes the internal data format for conditions and actions, which may reset /
remove legacy existing execution-limit entries without stored IDs.
- Fixed #745 by adding conditions for actions to allow more complex and dynamic behavior.
- Fixed #652 by adding dialog button tooltip for longer texts.
- Fixed #687 by adding command value tooltip to show the full value.
- Added Experience Level conditions.
- Added Game-mode conditions.
- Added has item in inventory condition.
- Added has item in hand condition with (main hand and off-hand) support.
- Added player health condition.
- Added player tag condition.
- Added player team condition.
- Added Goldmere example NPC preset with various conditions and actions.
- Added negative condition support to allow negating conditions for more complex logic.
- Removed parameter pseudo IDs for
ActionDataEntryand replaced them with random UUIDs. - Refactored condition system to allow more condition types.
### 6.17.0
- Fixed #738 by adding additional tooltips for "Execute as player"
- Fixed to detailed logs by reducing log.info messages during startup and in-game.
- Added additional unit and game-tests.
### 6.16.0
- Fixed #732 by providing option to disable ESC key and close button for dialogs.
- Fixed #723 by avoid auto-close in specific cases like trading screens.
- Added general dialog configuration options to allow users to customize dialog behavior.
- Added avatar scaling and position offset options for dialogs.
- Added missing translation keys.
### 6.15.0 (Trades, Player Heads, Epic Fight and QOL updates)
- Fixed #731 by resyncing species data, if species list is empty on the client.
- Fixed #730 by improving Epic Fight integration and enabled experimental features.
- Fixed #729 by making sure trade uses are stored correctly.
- Fixed #728 by adding custom head support for player heads.
- Fixed #689 by showing remaining trade uses and allow resetting manually and automatically.
- Fixed #218 and #132 with new trade configuration screen and better support for custom trades.
- Fixed trade specific edge by switching between basic and normal/advanced trading mode.
- Fixed dialog button text is truncated with tooltip showing the full text.
- Fixed Cobblemon animation issues by syncing animation state with Cobblemon Animation System.
- Added per trade specific actions to allow users triggering actions after buys.
- Added trade reset button to reset all trades easily.
- Added trade usage information to trade configuration screen.
- Added experimental feature state to allow users to manually enable experimental features.
- Added Griselda Grindstone as example trader with actions.
- Cleanup test files.
### 6.14.0
- Fixed #727 by making sure changes are synced to the client when changing values.
- Fixed #726 by adding additional allow lists for specific commands.
- Fixed #686, #389, #304, #211 by adding basic Cobblemon support with Cobblemon NPC.
- Fixed dialog misalignment and navigation issues by adjusting dialog sprites and screens.
- Fixed x and z root rotation by correcting rotation logic and pivot calculations.
- Added basic Cobblemon support with custom NPC type and model for testing.
### 6.13.0 (Security and Permissions Updates)
Notes: This update includes better security checks and permissions for multiplayer environments. It
allows to execute server commands which can be potentially dangerous if used with malicious intent.
- The update splits the model root data and logic from the rest of the model part data and logic,
- Fixed #725 by separating model root data and logic from the rest of the model part data and logic.
- Fixed #722 by supporting .sbnt files as local presets.
- Fixed #675 by adding dedicated assets for dialog and config screen backgrounds.
- Fixed #605, #532, #529 with new security checks and permissions system.
- Fixed #469, #311 by adding experimental api documentation and examples for custom model support.
- Fixed double rendering of config screen background by removing redundant background rendering.
- Fixed Ghast and Slime hitbox and name tag position issues by adjusting bounding box.
- ⚠️ Added security checks to prevent potential exploits and allow safe usage in multiplayer
- Replaced dynamic dialog screen background with a static one for better performance, customization
- Replaced dynamic config screen background with a static one for better performance.
- Refactored config-ui specific components and removed them from the core mod.
- Removed duplicated sprite sheets.
- Prepare permission system for possible Luck Perms integration in the future like #712.
- General code cleanup and optimizations related to config screen rendering and assets.
### 6.12.0
- Fixed #714 by adding additional checks for custom model part list based on vanilla models.
- Fixed #713 by reducing log verbosity with downgraded per-NPC INFO messages to DEBUG and
- Fixed #711 by reduced oversized startup/config log output.
- Fixed NBT validation guard to prevent unnecessary buffer allocations in production.
- Added model part name constants to EasyNPCModelManager for consistent usage across mixins.
- Improved RenderEntityTypeSupportConfig by enhancing filter logic and optimizing data structures
- Removed verbose debug logs that dump large data structures.
### 6.11.1
- Fixed #710 by improving backward-compatible parsing for recoverable trade data.
### 6.11.0
- Fixed #703 rendering issue with new custom layer system and hand renderings.
- Fixed #701 by adding additional safeguards and logging for invalid trading offers.
- Fixed smart animation not working properly with modified head position.
- Fixed head tracking by moving player detection back to server side-only.
- Fixed CustomLookAtPlayerGoal to better handle edge cases and reduce jitter.
- Fixed issue with Doppler NPCs keeping their hand inventory.
- Improved PoseManager logging message.
- Updated logo with a new design.
### 6.10.0
- Fixed #698 by adding try and catch for 3rd party entity creation.
- Fixed #695 by clearing model part rotations/positions when switching to a
DEFAULTvanilla pose. - Fixed #695 by applying lock rotation and pose animation only when the NPC is idle.
- Fixed #695 by correcting root rotation pivot to use actual bounding box height instead of 0.5f.
- Fixed multiple objective registration issues including inverted
isTargetedPlayercheck, wrong
targets.
- Fixed goal reference being retained after objective is unregistered.
- Removed auto-lock of ROOT rotation when loading poses; root lock is now user-controlled.
- Added lock rotation checkbox to the advanced and custom pose configuration screens.
- Added model-specific pose key filtering in
ConfigurationMenuHandlerfor the default pose screen. - Added unit tests for
CustomPosition,CustomRotation,CustomScale,ModelPose,
ModelAnimationBehavior and ModelAnimationData.- Added
NPCDataIsolationTestHelperand game tests for Fabric and Forge. - Increased max head yaw range from 60° to 65°.
### 6.9.0
- Fixed #692, #666 by adding caching and safeguards to prevent redundant retriggering of NPC entity
- Fixed #651, #617 by adding basic custom poses for all supported NPC types.
- Fixed #597 by adding additional Flee goals for fleeing from players, villagers, monsters, ...
- Fixed pose loading to read directly from mod resources instead of copying files to disk.
- Fixed duplicate
saveNPCcalls on entity join by checking existing registry entry first. - Added
despawnandspawncommands to remove and re-spawn NPCs by UUID with configurable removal
- Added
ModelPoseAPIandEasyNPCEntityHandlerpublic API classes for controlling NPC poses and
- Added pose data files for all supported NPC types.
- Added lock rotation checkbox to the basic pose configuration screen.
- Added
MoveToPositionGoalto move an NPC to a position before executing a callback action. - Added
EasyNPCLookControlandEasyNPCBodyRotationControlto respect locked root rotation. - Added synced owner change and dimension change to the NPC entity data index.
- Added EasyNPCItemAttachmentLayer into various entity renderers.
- Added dedicated
Flee Objectiveconfiguration tab with objectives for fleeing creepers, monsters,
- Added
FOLLOW_ITEMobjective to the follow objectives tab to make NPCs follow item entities by
minecraft:apple).- Added
LookAtEntityByUUIDGoaland enabled the look-at-entity-by-UUID and look-at-owner objectives
- Added
persistentflag toSynchedDataIndexso that transient indices (e.g. crossbow charge,
- Added configurable
customParticlesEnabledflag toSlimeBasefor API consumers. - Added
SoundType.PETand mappedCAT_PURRto the cat NPC for tamed ambient sound variety. - Reduced log verbosity for periodic NPC save operations from INFO to DEBUG.
### 6.8.3
- Fixed #680 by enforcing version miss-match by upgrading network protocol version.
- Fixed #679 by resetting position, rotation and size for name tag.
- Fixed #665 by adding multi state slide for root rotations.
- Fixed #664 by adding option to disable following mouse cursor for easier posing.
- Fixed #663 by improve support for X and Z root rotations.
- Fixed #661 by adding quick rotation with NPC wand and sneaking to the NPC to rotate the root to
- Fixed move tool is wrongly triggering interactions by adding check for move tool in interaction
- Fixed Preset Item is wrongly triggering interactions by adding check for preset item in
- Fixed Slime and Ghast hitbox and name tag position issues by adjusting bounding box and eye height
- Fixed Slime and Ghast GUI position by adjusting offset values.
### 6.8.2
- Fixed #677 by extending
SafeMerchantDatawith notifyTrade to avoid crashes. - Added progression data support for leveling up NPCs based on player interactions and actions.
- Added global NPC tracking system for better management and debugging of NPCs across the world.
- Added
OriginalModelConfig.withVariantTexture()option to allow using variant textures with the
### 6.8.1
- Fixed #676 by using existing preset helper method instead of custom one.
### 6.8.0 (Adding API support)
- Fixed #667 by adding warning messages and additional checks for invalid network packets.
- Fixed Horse spawn eggs model.
- Fixed pose support for allay, chicken, creeper, fox, ghast, horse, illager, iron golem, slime and
- Added NPC base classes for better API support.
- Added NPC raw classes for advanced API support.
- Added Slim and Ghast NPC types.
- Added Custom Model API for easier integration with other mods and custom models.
- Refactored internal data handling and registration for better maintainability and future
### 6.7.1
- Fixed #657 and #656 by adding additional client side checks for vanilla bug.
### 6.7.0
- Fixed #650 by implementing Wolf Leg Animations in setupAnim method.
- Fixed #648 by fixing canBeHitByProjectiles translation.
- Fixed #645 by adding
allowBypassInvulnerabilityconfig option to allow/deny bypassing
- Fixed delete button showing label even with small width.
- Fixed up and down buttons not positioned correctly in some cases.
- Fixed name tag showing up for dialog and configuration UI.
- Fixed distance action issue were multiple actions are not properly triggered.
- Fixed issues with NPC presets.
- Fixed Cat NPC and Wolf NPC owner data not syncing properly.
- Added preset browser for easier selection of common NPC presets.
- Added preset .snbt (text) export and import functionality for sharing NPC presets.
- Refactored existing NPC presets to use new .snbt format.
- Refactored spawner system to use new preset format for better maintainability and future
### 6.6.2
- Fixed #643 by rework scaling system.
- Fixed scaling not properly updating hitbox and nametag position after restart / reload.
- Added MID and MOUSE_OVER name tag visibility modes for finer control over NPC name display.
- Added team-based name tag visibility support respecting vanilla Team.
### 6.6.1
- Fixed #638 by refactored internal data handling for display attributes.
### 6.6.0
- Fixed #634 by implementing asynchronous texture loading with dedicated thread pool.
- Fixed texture loading blocking render thread causing game freezes.
- Fixed race conditions in texture reload protection using atomic operations.
- Fixed resource leaks in HTTP connections during remote texture downloads.
- Fixed URL validation spam allowing multiple simultaneous downloads of the same texture.
- Fixed exception handling for remote image validation preventing crashes on invalid URLs.
- Fixed
defineId called for:warning messages during NPC loading. - Refactored texture loading architecture with multi-level defense and rate limiting.
- Refactored entity data registration logic for better maintainability.
- Converted data classes to modern Java records for better immutability and thread-safety.
- Added thread-safe session server spam protection with ConcurrentHashMap.
- Added comprehensive error recovery with automatic cooldown reset on failures.
- Improved texture loading with 2-thread pool and 500ms rate limiting.
- Improved exception handling with specific catch blocks for IIOException and FileNotFoundException.
### 6.5.2
- Fixed Villager profession and job skin issue.
- Improved GitHub workflows by adding cache for gradle dependencies.
- Improved Gradle build time and cleanup tasks.
### 6.5.1
- Fixed #632 by implementing ON_KILL action type and event.
- Fixed #629 by improving texture handling performance, caching, and memory usage.
- Fixed kill command is not working on NPCs.
- Fixed texture reload protection preventing cache reload after eviction.
- Fixed WebP validation bug in remote image validator (missing return statement).
- Refactored texture handling logic for better maintainability and future improvements.
- Added time-based reload protection (60 seconds) to replace permanent blocking mechanism.
- Added missing variant textures for chicken, pig and wolf.
- Added additional unit tests for texture handling.
- Improved gradle build tasks.
### 6.5.0
- ⚠️ Removed jar-in-jar bundle approach for better mod compatibility and api capabilities.
- Fixed #627 scissor implementation for better compatibility with other mods.
- Fixed #625 lively animation issues when using rotated or moved model parts.
- Fixed default animation are canceled when using scaled model parts.
- Added better pose animation control with smart, default und none options.
### 6.4.1
- Fixed #626 screen switching logic for different NPC UUIDs, thanks to
Spawnbladefor the detailed
### 6.4.0
- Fixed #626 by improving dialog data validation and error handling.
- Fixed #623 by refactoring render data and render handling.
- Fixed #622 by making sure custom data are properly saved and loaded.
- Fixed open dialog action type to allow opening dialogs from other NPCs.
- Fixed hashing issues by adding missing equals and hashCode methods for ConditionDataSet and
- Added custom data test item for #622 and easier testing of custom data.
- Improved records and fixed potential issues with missing data.
### 6.3.0
- Refactored config ui specific components and removed them from the core mod.
- Fixed dialog data by filtering dialog data before sending to the client.
- Fixed dialog editor layout issues and improved usability.
- Fixed missing default values for some dialog data fields.
- Added dialog priority support to control the order of dialog execution.
- Added condition support for dialog and scoreboard actions.
- Added frequency support for dialog to limit how often an dialog can be shown.
- Added new NPC preset to for scoreboard and condition support.
- Improved dialog button data format by removing redundant fields.
### 6.2.0
- Fixed legacy custom name parsing.
- Fixed string injection within dialogs.
- Fixed missing translation for action types.
- Added scoreboard action type to increase, decrease, set scoreboard values.
- Added
@score(...)NPC macro to display scoreboard values in the dialog. - Added additional unit tests.
- Improved spin button with indicators and better usability.
### 6.1.2
- Fixed container and menu sync issues with missing close container packets.
- Fixed close button not working in some cases.
- Fixed jumping mouse cursor between screen transitions.
- Fixed translation files and removed duplicate and deprecated entries.
- Moved Easy NPC wand to existing core item tab instead of creating a new one.
- Added cat pose support for different model parts (except tail).
- Improved EasyNPCWand glowing effect performance by disabling it when not needed.
- Improved custom entity detection by excluding non-living entities like displays, makers, throwns
- Improved cat variant handling.
### 6.1.1
- Fixed #615 by checking if item is equipped in one of the hands.
- Fixed #612 by re-validating entity types.
- Fixed #610 by force sync of hat and head layers for specific models.
- Fixed orc textures.
- Fixed cat variant handling for 1.21.5.
- Fixed player render by adjusting render state
skinfield. - Fixed cat renderer by adjusting render state
texturefield. - Fixed position, scaling and rotation preview.
- Fixed Fairy model.
- Improved custom model support and performance, by moving related logic into to client side only.
- Improved caching of player to UUID mappings for player skins.
- Limited change model commands and logic to Doppler NPCs only.
- Added renderEntityRaw method to render NPC as-it-is.
### 6.1.0 ✨
This is a major release. Please back up your worlds and NPC data before updating. This version
contains many improvements, optimizations, and internal changes that are **not fully compatible**
with earlier releases.
⚠️ Breaking changes
- Existing NPCs and their configuration data from versions before 6.1.0 may not load correctly or
- Internal data formats and some behaviors have been refactored to support new use-cases.
🧩 New modular structure
Easy NPC is now split into three separate mods:
- Easy NPC** – Bundle that includes both Core and Configuration UI for a plug‑and‑play experience.
- Easy NPC: Core** – Lightweight runtime and logic for NPCs, with minimal dependencies. Intended
- Easy NPC: Configuration UI** – Standalone configuration interface for creating and editing NPCs.
🎯 Why this change?
- Allows servers and modpacks to ship only the **Core** mod on the server side for a leaner setup.
- Reduces memory usage and load times when the UI is not required everywhere.
- Makes development and testing faster by separating UI and core logic.
[history]: https://github.com/MarkusBordihn/BOs-Easy-NPC/commits/
[upgrade_guide]: https://github.com/MarkusBordihn/BOs-Easy-NPC/wiki/Upgrading
## Note
This change log includes the summarized changes. For the full changelog, please go to
the [GitHub History][history] instead.
Note: Please always back up your world / NPCs before updating to a new version!
Check the [upgrade guide][upgrade_guide] for more information.
### 7.14.0
- Fixed #846 by keeping custom poses for players who start seeing the NPC later.
- Fixed attribute and trading settings missing for players who start seeing the NPC later.
- Fixed changed max uses, XP and trading type not shown in the trading screens until reload.
- Fixed
/easy_npc sound setchanges not reaching players until the NPC was reloaded. - Added game tests that check NPC poses and settings after respawns and for new players.
### 7.13.0
- Fixed color and formatting tags in dialog button names showing as plain text.
- Fixed the button preview in the editor showing lowercase names as a raw translation key.
- Fixed the "Move EasyNPC" item not working for NPC owners outside of creative mode.
- Fixed
/easy_npc owner setreporting success even when the owner could not be changed. - Fixed the game crashing when the URL or player skin screen showed a skin download error.
- Fixed the preset browser search showing no results after scrolling down the list.
- Changed the network protocol version, so client and server must run the same mod version.
- Added
@initiator,@npcand@score()support to dialog button names to fix #841. - Added automatic client tests with the Client Runtime Interface Toolkit.
- Larger core refactoring and code cleanup.
### 7.12.2
- Fixed the Fairy hitbox being far too small, so its name tag and speech bubble sat in its body.
- Fixed scaled NPCs keeping their old hitbox and eye level, so hits, clicks and looking missed.
- Fixed oversized names, lists and NPC data in network packets being read without any limit.
- Fixed invalid NPC positions, scales, attributes, names and durations from being applied.
- Changed Fairy NPCs to take up the space of their model, so they collide and can be clicked.
- Changed Skeleton, Stray and Bogged NPCs to the vanilla hitbox height, they were slightly short.
- Changed the network protocol version, so client and server must run the same mod version.
### 7.12.1
- Fixed #836 by always showing "Restore", including datapack presets, with a reason tooltip.
- Fixed preset import and export messages missing, wrong or not warning about replaced NPCs.
- Fixed the preset browser reloading on each keystroke, leaking NPCs and clearing the selection.
- Fixed the preset list sorting, filter order and layout clipping options in small windows.
- Fixed
/easy_npc preset import datawithout a position importing it as a default preset. - Fixed spawn rate limit leaks, unstable preset IDs and "Spawn New" stacking NPCs on one spot.
- Changed "Restore" to refuse instead of spawning a copy when it is not permitted.
- Added sorting, a match count, reload, auto-close, the NPC ID and tooltips for presets and skins.
- Added
matching <pattern>batch imports with limits, a confirmation and a clickable position.
### 7.12.0
- Fixed #833 by showing Easy NPC Wand outlines only to the wand holder, owner and admins.
- Fixed #834 by adding "Set Home Here" and "Reset Home" buttons to the position configuration.
- Fixed #835 by keeping the NPC ID and position in exported presets, so imports restore the same
- Fixed preset imports and spawn eggs losing the owner's list entry and owner objectives.
- Fixed NPCs restored from an automatic backup losing their owner and becoming ownerless.
- Fixed selection lists showing only their first six entries and hiding the rest.
- Changed importing a preset to update the original NPC at its stored position instead of adding a
- Changed completed trades to play the "Trade completed" sound, which stayed silent before.
- Changed the API dialog call to report an unknown dialog label instead of always reporting success.
- Changed NPCs without arms to carry held items at the head or body instead of hiding them.
- Changed the optional Easy Model Entities dependency to require version 2.4.0 or newer.
- Added a "Sound" configuration with sounds for dialogs, speech, swimming, eating and fall damage.
- Added a searchable sound selection with volume and pitch sliders to the "Sound" configuration.
- Added a "Block Vehicles" option to keep NPCs out of boats, minecarts and modded chairs.
- Added the profession selection to all skin configurations and a new built-in skin per NPC type.
- Added client settings to hide name tags behind walls and
highlightEnabledfor wand outlines. - Added an "Exists" condition operation and API access to NPC movement, actions and presets.
### 7.11.0
- Fixed #828 by no longer freezing the server on logout when NPCs follow or watch the player.
- Fixed #831 by moving routine NPC removal messages to the debug log.
- Fixed #832 by making humanoid NPCs ignore custom player models, animations and poses.
- Fixed hourly NPC backups stuttering on large worlds and retaining timestamps of removed NPCs.
- Fixed hourly NPC backups losing the identity, owner and position of the backed-up NPC.
- Fixed owner-login restoration duplicating, repeatedly restoring, reviving or moving unloaded NPCs.
- Fixed NPC index and file synchronization issues causing lost NPCs, crashes or false warnings.
- Fixed stale NPC data after unloading, avoided redundant writes and added repeated-unload warnings.
- Fixed the preset browser failing to list custom and world presets saved in the SNBT format.
- Fixed speech bubbles losing their text and turning translucent with Iris shaders.
- Fixed the "Opacity" of an NPC being ignored while a shader pack is active.
- Fixed text formatting and macro parsing for translated speech bubbles and mod API texts.
- Fixed speech bubbles and their text staying hidden behind blocks while a shader pack is active.
- Added
minLightLevelto keep speech bubbles readable in dark surroundings.
### 7.10.0
- Fixed #829 by allowing bats and other non-walking mobs as the render entity of a Doppler NPC.
- Fixed NPCs rendered as a bat, frog or warden showing a static pose instead of their animation.
- Fixed the NPC name tag showing above the previews in the "Custom Models" configuration.
- Fixed speech bubbles being cut off by walls, doorframes and the NPC's own body.
- Fixed the previews in the "Custom Models" configuration.
- Changed the previews in the "Custom Models" configuration to stand on a common ground line.
- Changed overlapping speech bubbles to move apart and to stay visible when the NPC is off-screen.
- Changed "Navigation: Automatic" to use flying movement for NPCs rendered as a flying mob.
- Changed the render entity list to hide seats, paintings, thrown items and other non-mob entities.
- Added a "Min. hover height" slider for flying NPCs and client settings for speech bubbles.
### 7.9.0
- Fixed modded fish NPCs, like the ones of Tide 2, spinning around instead of swimming upright.
- Fixed "Navigation: Automatic" using ground movement for water NPCs and aquatic model NPCs.
- Fixed the "Random Swimming" objective never moving an NPC that uses aquatic navigation.
- Fixed a swimming NPC shaking or twitching in place instead of holding its tilt and swim depth.
- Fixed a swimming NPC turning in circles forever when it could not reach its next path point.
- Fixed an NPC that fell into water never getting out of it again.
- Fixed a following NPC searching a new path every tick while its target was unreachable.
- Fixed the "Move to" actions stopping short of a raised target or not starting while in the air.
- Fixed "Move back to Home" ignoring height differences and never returning from beyond 32 blocks.
- Fixed the "Opacity" input field being too narrow to show a value of 100.
- Fixed a damaged NPC with an Easy Model Entities model never flashing red.
- Changed modded water NPCs to swim level, vanilla water mobs keep their tilt as before.
- Changed the "Move to" actions to walk up to 48 blocks and to teleport only beyond that range.
- Changed "Move to" and "Move back to Home" to give up after three seconds without progress.
- Changed the timeout of a "Move to" action to count real ticks, it ran twice as long before.
- Changed a new "Random Swimming" objective to rank below following, fleeing and attack goals.
- Changed "Opacity" of an NPC with an Easy Model Entities model to be applied by that mod itself.
- Changed the minimum Easy Model Entities version to 2.3.0, older versions disable the integration.
- Added "Depth below surface" and "Height above floor" sliders for the swim level of an NPC.
- Added log entries for the NPC files written on a world save, with a warning above 250 ms each.
### 7.8.1
- Fixed #827 by rendering fish NPCs in water upright instead of always flopping on their side.
- Fixed #828 by keeping a damaged NPC from blocking the world save, it now falls back to defaults.
- Fixed a restored NPC picking up a random preset ID that changed with every save.
- Changed NPC data to only be written to disk when it actually changed.
### 7.8.0
- Fixed smaller text and UI issues.
- Changed an NPC that is already standing at its target position to finish the movement right away.
- Changed the "None" skin tab to "Advanced", which now holds "Disable Skin" and the texture field.
- Added a "Move to" action, which sends an NPC to a position, a player, its owner or its home.
- Added a "Move to and Wait" action, which runs the following actions only after the arrival.
- Added an arrival radius, a timeout and an optional teleport to both move actions.
- Added an "Opacity" attribute from 0 to 100, which fades body, armor and hand items together.
- Added a "Set Opacity" action, which turns an NPC into a ghost or hides it completely.
- Added the "Lantern Wraith" preset, a ghost walking a square with a short line at every corner.
- Added API access to the move actions and the opacity of an NPC.
- Added a "Resource Location" skin type, which renders any texture of a mod or a resource pack.
- Added an "Advanced" skin tab, which previews the NPC with the entered texture before applying it.
### 7.7.7
- Fixed #821 by keeping the transparency of 64x64 skins, which Fresh Moves needs for its eyes. Skins
- Fixed #818 by running trade actions for Villager and Wandering Trader NPCs as well.
- Fixed a dialog with several text variants switching its speech bubble size every second.
- Fixed the skin cache storing the processed image instead of the original download.
- Fixed the untranslated interval names, like
PER_DAY, of the "Execution Limit" condition. - Fixed the
sitanimation of Easy Model NPCs, which never used the built-in sitting pose. - Fixed the speech bubble being cut off by the head of an NPC when a player stood close to it.
- Changed speech bubbles to keep their screen size and to move down or aside when a player is close.
- Changed the speech bubble text to render 20% larger than a name tag.
- Changed a time based action set with a "Wait" action to run in order instead of picking one entry.
- Changed dialog texts to wrap later, so an existing dialog can switch to the wider screen layout.
- Changed fallback actions to skip screen actions without a player, like the regular actions do.
- Changed the minimum Easy Model Entities version to 2.1.0, older versions disable the integration.
- Added a "Wait" action, which pauses the following actions of an event for a chosen duration.
- Added the "Countdown Timekeeper" preset, a speech bubble count to ten ending in sound and sparks.
- Added scaling and rotation for Doppler NPCs behind the "Experimental Features" checkbox. Both only
- Added a "Sound" action, which plays a sound at the NPC with sound category, volume and pitch.
- Added "Every 5 Minutes" and "Every 15 Minutes" to the "Execution Limit" condition.
- Added a "Player Idle" condition, which checks how long a player has not moved.
- Added an "Immovable" attribute, which keeps an NPC in place against pushing and knockback.
- Added
/easy_npc pauseto pause a single NPC or all NPCs; the global pause ends with the server. - Added API access to the sound action, the pause state and the idle time of a player.
- Added a texture override per model slot for Easy Model NPCs over
/easy_npc render texture. - Added a "Repeat" playback mode with a count and a time limit to the "Play Animation" action.
- Added API access to animation variants, texture slots and textures of Easy Model NPCs.
### 7.6.0
- Fixed unclear mod conflict errors for duplicate entity data tracker IDs.
- Fixed third-party health bars rendering over NPC previews in configuration and dialog screens.
- Fixed Doppler and Easy Model Entities NPCs using default hitboxes instead of their model size.
- Fixed the
/easy_npccommands suggesting no NPC UUIDs at all on a server. - Fixed the pose list of the "Set Pose" action drawing over its input field.
- Fixed the untranslated "Loop", "After current" and "Action Data Type" labels of the action editor.
- Fixed the missing hint text of the "Chance" condition.
- Fixed long condition hints running out of the editor screen instead of wrapping.
- Fixed the misaligned help icons and text buttons of the "Message" action.
- Fixed changes to the "Set Pose", "Play Animation" and "Stop Animation" actions not being saveable.
- Fixed the speech bubble text sitting closer to its upper border than to its lower one.
- Changed the NPC suggestions to list the crosshair NPC first and only own NPCs without permissions.
- Changed a preset export to only store what differs from a new NPC, without position or owner.
- Changed a preset without objectives or actions to fall back to the defaults of its NPC type.
- Changed events without a player, like "On Spawn" or "On Kill", to check their conditions. An
- Changed a time based action to pick the owner as
@initiatorwhenever the owner is nearby. - Changed speech bubbles to stay visible from 5 up to 18 seconds, depending on the text length.
- Changed the "Set Pose" action to only show its input field for the "custom" pose entry.
- Added time based actions on five fixed steps, from every ~1 second up to every ~15 minutes.
- Added a "Message" action for chat, system message and speech bubble text without a command.
- Added text variants, a sender name, a recipient and translation keys to the "Message" action.
- Added the speech bubble graphic as
easy_npc:textures/gui/speech_bubble.pngfor resource packs. - Added a "Chance" condition in percent and a "Relationship" condition for owner and faction.
- Added spawn, owner login, state change, day / night, weather and the missing "On Trade" events.
- Added a base preset per NPC type under
easy_npc:api/preset/base/, usable as a parent preset. - Added the "Wandering Companion" preset, a talkative NPC built from time based messages.
- Added an action registry, an action handler, a preset validator and richer event data for mods.
- Added a tooltip with name, type and distance to every NPC suggestion of the
/easy_npccommands. - Improved the NPC suggestions, which appear without typing and tolerate a near miss of one block.
### 7.5.0
- Fixed the home position of an NPC always reading as unset, which hid "Home" in the configuration
- Fixed NPCs spawned from a preset, the preset browser or a respawn never getting a home position.
- Fixed an NPC spawned from the preset browser keeping the home position of the world the preset was
- Fixed NPCs being drawn as a white silhouette with a shadow in the configuration, skin and preset
- Fixed #814 by giving every Cobblemon NPC its own animation state instead of one per species.
- Fixed #813 by letting "Move back to Home" work at any distance instead of only near its home.
- Fixed #812 by checking once per session whether a player changed their skin.
- Fixed #810 by accepting Cobblemon aspects of resource packs instead of only "shiny" and "female".
- Fixed the server crashing when an NPC with a "Tempt" objective ticked its goals.
- Fixed flying NPCs like Allay, Vex and Ghast moving on the ground instead of flying.
- Fixed dialog, button, preset, pose and texture names with duplicates or special characters.
- Fixed conditions not being editable on a dedicated server and untranslated condition texts.
- Fixed Easy Model Entities NPCs not turning their head and their model list ignoring a
/reload. - Fixed the "Legacy Easy NPC Data" warning appearing for newly created NPCs.
- Fixed missing transparency corrections for old 64x32 skins, which showed layer artifacts.
- Fixed the player skin screen freezing for a moment while a player name was looked up.
- Fixed the "Reset look at ..." objective label, which read "Reset loot at ..." in some languages.
- Fixed the Fabric game tests, which crashed on start because of the development helper mods.
- Fixed NPCs losing their owner when they were spawned again after a despawn.
- Fixed objectives being deleted from an NPC when the mod providing them was missing at start.
- Fixed objectives being switched off for good when their target entity was missing.
- Fixed importing a preset without a stored id, which spawned an NPC without owner and home.
- Fixed "Follow owner" and "Look at owner" keeping their old target after the owner was changed.
- Fixed attack targets staying assigned to an NPC after the targeted entity was gone.
- Fixed the "Look at Item" objective, which could be stored but never did anything.
- Fixed walking animation for Doppler NPC and 3rd party models.
- Fixed Forge never running its server start-up step, which left NPC tracking, factions and the
- Fixed Forge development runs starting without any mixins, which disabled the vanilla entity
- Changed the movement objectives to a fixed order: flee, follow, return home, then stroll. NPCs
- Changed datapack presets to
easy_npc/preset/, the old folder still works, but only for easy_npc. - Changed the preset browser to always list its entries in the same order.
- Changed the required Easy Model Entities version to 1.7.0, floating models now hover by default.
- Removed the experimental user-defined NPCs; the extra config file is no longer read or created.
- Removed the unused
SERVER_SKINskin type. - Added new gametest strcuture to support gametest in 1.21.11 and higher.
- Added a reload button to each entry of the player skin screen, to fetch a single skin again.
- Added the reason to the log whenever an NPC is removed, so an unexpected despawn can be traced.
- Added suggestions to
/easy_npc render set species. - Added support for presets from other mods, which no longer have to use the
easy_npcnamespace. - Added a preset visibility that hides a preset from the preset browser and the NPC screens.
- Added a teleport distance and a resting spot offset to the follow objectives.
- Added item tags, a "can be scared" option and a "only without owner" option to "Follow item".
- Added an item field to the look objectives, so an NPC can watch a chosen dropped item.
- Added an identifier per NPC, so a mod can find its own NPCs again.
- Added an option to spawn an NPC again when its owner logs in.
- Added NPC states with number, yes/no and text values, usable as condition, action and command.
- Added a "Navigation" and a "Hover height" setting to switch any NPC between ground and flying.
- Added a parent preset reference, so a preset can build on another one and only override changes.
- Added the state driven "Forge Keeper" preset.
- Added custom conditions and dialog, action and state events for other mods.
- Added "On Far Distance" as a distance action, which triggers at 32 blocks.
- Added game tests for NeoForge, which had none, and restored the spawn egg, dialog screen, data
- Added game tests for every configuration and editor screen, covering all three mod loaders.
- Added game tests for the home position, covering the spawn default, the stored value and
- Improved the model name parsing, which mistook a species ending in "_shiny" for a variant.
- Improved following of flying NPCs, which now steer directly when there is no path through the air.
- Improved floating Easy Model Entities models, which now bob up and down.
- Improved third party support with an API for presets, own objectives and objective configuration.
### 7.4.0
- Fixed #807 by no longer pulling every same-type NPC within 32 blocks into a "Defend Self" fight.
- Fixed #805 by evaluating all visibility settings together instead of stopping at the first one.
- Fixed #804 by keeping the custom name on Doppler NPCs for name based textures and the name tag.
- Fixed #803 by adjusting assets to match typical Minecraft style instead of generic UI style.
- Fixed the day and night detection, which counted sunrise as night and sunset as day.
- Fixed the visibility in the Nether and the End, which used the Overworld time.
- Fixed the time and game mode visibility checkboxes appearing in a random order.
- Fixed game tests only being able to fail on their first assertion, which hid later failures.
- Fixed the "Saddled" horse skin variants, which never showed a saddle.
- Changed "Visible to Owner" and "Visible to Team" to also follow day, night and game mode.
- Changed Evoker, Illusioner and Vindicator variants without "Crossed Arms" to keep their arms down.
- Added a "Defend Faction" objective that attacks whoever hurt a nearby faction member or player.
- Added a system message when faction members fight each other and the faction stays out of it.
- Added a head equipment slot for Illagers so their captain banner can be removed or swapped.
- Added a day and night preview to the display configuration screen.
- Added unit and game tests for the visibility attributes and the faction defense.
- Improved the visibility check performance by reading the display attributes only once per check.
- Improved display attributes from older versions by completing them with their defaults.
- Improved the attack objective screen by disabling "Protect Owner" and "Defend Faction" when unset.
### 7.3.0
- Improved skin variants by carrying their data as typed fields instead of parsing variant names.
- Centralized the Cobblemon mod id and default model on shared constants.
- Reduced duplicated enum code with a shared
EnumUtilshelper forget(String)lookups. - Optimized villager profession and type lookups to use direct registry keys instead of scans.
- Optimized enum name lookups by caching tag names, ids and keys once at construction.
- Added unit and game tests for skin variants, villager resolution and the enum helper.
### 7.2.0
- Fixed #801 by using combination for NPC, Dialog and Action UUIDs to avoid collisions for action
### 7.1.1
- Fixed #800 by lazy loading entity types.
- Fixed #799 by fixing edge cases and adding additional documentation and better log messages.
- Fixed #798 by considering console, commands and command blocks as trusted command sources.
- Fixed a critical single-player / LAN issue where client and server NPCs shared the same registry.
- Fixed a memory leak in the configuration menu handling and added timeout and disconnect cleanup.
- Fixed duplicate downloads when several NPCs request the same skin at the same time.
- Fixed skin lookups failing after a error so a slow server no longer freezes the game.
- Fixed the URL skin screen freezing the game while checking a remote image; the check now runs in
- Added a new World Spawner block that limits an NPC preset across the whole world (all dimensions),
- Hardened remote skin downloads with a strict size limit and safe redirect handling to prevent
blockPrivateAddresses setting.- Improved server performance by only sending entity and player load events to NPCs that actually
### 7.0.0
- Fixed #794 by using the expected type for NPC rendering.
- Fixed #791 by adding Wandering Trader NPC type.
- Fixed #788 by extending the AI safeguards to Epic Fight and raw NPC variants (Piglin, Villager,
- Fixed #787, #531, #237 and #184 by adding a faction system with
/easy_npc factioncommands,
- Fixed #787, #771 and #572 by adding a new
targetobjectives tab to attack hostile factions or
- Fixed #786 by adding gender and shiny model variants for Cobblemon NPCs, searchable via
female
shiny in the model selection.- Fixed faction combat between invulnerable NPCs by adding the new
Attackable by Factionscombat
- Fixed Cobblemon model selection previews for oversized species by scaling with Cobblemon's own
- Fixed faction management edge cases by validating faction names, sorting faction lists and
- Fixed custom skin reloads by loading and clearing texture caches per skin model instead of always
- Improved the
Attackable by Players/Monsters/Factionscombat attributes to work independently of
Invulnerable, each opening a targeted hole for its own attacker group.- Improved preset command and network handling by splitting the large handlers into smaller focused
- Added Easy Model Entities Support.
- Added faction manager and faction editor screens to create, color and delete factions and manage
FACTION_MANAGEMENT security feature.- Added new
Miscattributes tab as home for the NPC faction assignment. - Added reusable warning and help icon components for inline hints with tooltips.
- Added additional unit and game tests for factions, target objectives and Cobblemon model variants.
### 6.25.0
- Fixed #782, #636, #622 by preserving data components during validations.
- Fixed #780 by caching remote texture downloads and reducing duplicate registrations.
- Fixed #767 by clamping attribute sliders against extreme values from other mods.
- Fixed #754 by adding custom data item matching for NPCs with actions and conditions.
- Fixed texture manager running in the wrong thread may cause crashes and deadlocks in >= 1.21.x.
- Fixed empty UUID handling for action conditions.
- Fixed execution limit reset for actions.
- Added texture registration queue to avoid multiple simultaneous downloads in the same tick.
- Added NPC coin, key and red token as consumable items for NPCs with actions and conditions.
- Added
Welcome Coin Traderas example NPC preset with custom coin, key and red token item data. - Added attribute safeguards against extreme values from other mods.
- Increased fallback max health value from 1024 to 4096 for high-health NPCs.
- Improved texture manager by reducing duplicate texture checks and registrations.
### 6.24.0
- Fixed #459, #775 by adding an option to block interactions with invisible NPCs.
- Fixed #774 startup crash related to optional Epic Fight and Cobblemon entity type maps.
- Fixed #773 by checking timed trade resets during base ticks and before opening trade screens.
- Fixed trade reset timing by increasing internal tickers correctly.
- Added time of day and weather conditions for #459.
- Added additional unit and game tests for trade resets, ticker handling and entity attributes.
- Added
Skywatch Scoutas example NPC preset with time of day and weather conditions.
### 6.23.0
- Fixed #772 by adjusting texture retries with 403 and 404 errors and lowering logging.
- Fixed #770 item rendering for Epic Fight NPCs (Evoker, Pillager, Vindicator and humanoid skins).
- Fixed #769 door loops with NPCs not reliably opening or closing doors.
- Fixed #760 by adding a dialog option and config setting (buttonConditionMode: LOCK or HIDE) to
- Fixed #709 by adding color picker popup for names with 32 colors and/or a manual RGB/hex value.
- Fixed NPC name color being reset when renaming without a specified color by preserving the
- Improved the door movement attributes so "Pass Door" is automatically enabled while "Open Door"
### 6.22.0
- Fixed #766 by passing the full server player context to command execution for better compatibility
- Fixed #764 by adding entity health, npc health conditions and NPC preset
Grukk, the Sparring Post as example for using these conditions.- Fixed #763 by making sure dialog button execution limits are now recorded.
- Fixed #758 by providing a example NPC preset named
One Wish Companion. - Fixed crashes related to 3rd party villager AI reading non-registered brain memories on Easy NPC
- Fixed Dialog buttons are not locked for server-side data as preparation for #760 and #644.
- Fixed #628 by adding conditional dialog opening support / command for better control over when
- Added brain AI for Piglin and Piglin Brute NPCs and registered the full vanilla brain memory set.
- Added additional guns to the gun tag for #757.
- Added a new "Open Dialog (Conditional)" action that opens a named dialog only if its conditions
- Added new entity health and npc health conditions for actions, dialogs and dialogs buttons.
- Added Piglin, Piglin Brute and Zombified Piglin NPCs invulnerable, for consistency with other
- Added a new "Knockback Immunity" combat attribute that prevents the NPC from being knocked back by
- Added a new "Explosion Immunity" combat attribute that makes the NPC immune to explosion damage
- Moved the "Projectile Collision" attribute to the Combat attribute screen, where it fits better
### 6.21.0
- Fixed item attachment for Illagers in crossed-arms pose.
- Fixed broken illager crossbow attack goal.
- Fixed crashes related to 3rd party items which are not renderable as hand items #756.
- Fixed crashes related to 3rd party mixins trying to access non-existing model parts #756.
- Fixed log.info spam message by reducing log verbosity and adding additional checks for custom
- Improved EasyNPCModelManager performance.
- Refactored NPC renderers to remove default hand item layer.
### 6.20.0
- Fixed crashes related to 3rd mods trying to access non-existing NPCs goals.
### 6.19.0
Note: This update adjusted the dialog background images by 10x6 pixels, which may require users to
adjust their custom dialog backgrounds if they are using custom ones.
- Fixed #752, #130 by adding dialog button condition support to allow to disable buttons.
- Fixed #683, #215 by adding typewriter effect support for dialog text.
- Fixed #690, #309 by allowing conditions for dialog, dialog buttons and interactions.
- Fixed smaller UI issues with dialog screen layout and background.
- Refactored dialog background images by 10x6 pixels on each side.
- Refactored dialog screen layout to better fit the new background size and improve appearance.
- Added typewriter effect and client configuration for dialog text.
- Added condition symbols to indicate the condition status for dialog, buttons and interactions.
- Added amount field for item conditions to allow checking for specific amounts of items.
- Added
Threshold Wardenas example NPC preset with various conditions and actions. - Added smaller bug fixes and optimizations related to dialog conditions and button states.
### 6.18.0
Note: This update changes the internal data format for conditions and actions, which may reset /
remove legacy existing execution-limit entries without stored IDs.
- Fixed #745 by adding conditions for actions to allow more complex and dynamic behavior.
- Fixed #652 by adding dialog button tooltip for longer texts.
- Fixed #687 by adding command value tooltip to show the full value.
- Added Experience Level conditions.
- Added Game-mode conditions.
- Added has item in inventory condition.
- Added has item in hand condition with (main hand and off-hand) support.
- Added player health condition.
- Added player tag condition.
- Added player team condition.
- Added Goldmere example NPC preset with various conditions and actions.
- Added negative condition support to allow negating conditions for more complex logic.
- Removed parameter pseudo IDs for
ActionDataEntryand replaced them with random UUIDs. - Refactored condition system to allow more condition types.
### 6.17.0
- Fixed #738 by adding additional tooltips for "Execute as player"
- Fixed to detailed logs by reducing log.info messages during startup and in-game.
- Added additional unit and game-tests.
### 6.16.0
- Fixed #732 by providing option to disable ESC key and close button for dialogs.
- Fixed #723 by avoid auto-close in specific cases like trading screens.
- Added general dialog configuration options to allow users to customize dialog behavior.
- Added avatar scaling and position offset options for dialogs.
- Added missing translation keys.
### 6.15.0 (Trades, Player Heads, Epic Fight and QOL updates)
- Fixed #731 by resyncing species data, if species list is empty on the client.
- Fixed #730 by improving Epic Fight integration and enabled experimental features.
- Fixed #729 by making sure trade uses are stored correctly.
- Fixed #728 by adding custom head support for player heads.
- Fixed #689 by showing remaining trade uses and allow resetting manually and automatically.
- Fixed #218 and #132 with new trade configuration screen and better support for custom trades.
- Fixed trade specific edge by switching between basic and normal/advanced trading mode.
- Fixed dialog button text is truncated with tooltip showing the full text.
- Fixed Cobblemon animation issues by syncing animation state with Cobblemon Animation System.
- Added per trade specific actions to allow users triggering actions after buys.
- Added trade reset button to reset all trades easily.
- Added trade usage information to trade configuration screen.
- Added experimental feature state to allow users to manually enable experimental features.
- Added Griselda Grindstone as example trader with actions.
- Cleanup test files.
### 6.14.0
- Fixed #727 by making sure changes are synced to the client when changing values.
- Fixed #726 by adding additional allow lists for specific commands.
- Fixed #686, #389, #304, #211 by adding basic Cobblemon support with Cobblemon NPC.
- Fixed dialog misalignment and navigation issues by adjusting dialog sprites and screens.
- Fixed x and z root rotation by correcting rotation logic and pivot calculations.
- Added basic Cobblemon support with custom NPC type and model for testing.
### 6.13.0 (Security and Permissions Updates)
Notes: This update includes better security checks and permissions for multiplayer environments. It
allows to execute server commands which can be potentially dangerous if used with malicious intent.
- The update splits the model root data and logic from the rest of the model part data and logic,
- Fixed #725 by separating model root data and logic from the rest of the model part data and logic.
- Fixed #722 by supporting .sbnt files as local presets.
- Fixed #675 by adding dedicated assets for dialog and config screen backgrounds.
- Fixed #605, #532, #529 with new security checks and permissions system.
- Fixed #469, #311 by adding experimental api documentation and examples for custom model support.
- Fixed double rendering of config screen background by removing redundant background rendering.
- Fixed Ghast and Slime hitbox and name tag position issues by adjusting bounding box.
- ⚠️ Added security checks to prevent potential exploits and allow safe usage in multiplayer
- Replaced dynamic dialog screen background with a static one for better performance, customization
- Replaced dynamic config screen background with a static one for better performance.
- Refactored config-ui specific components and removed them from the core mod.
- Removed duplicated sprite sheets.
- Prepare permission system for possible Luck Perms integration in the future like #712.
- General code cleanup and optimizations related to config screen rendering and assets.
### 6.12.0
- Fixed #714 by adding additional checks for custom model part list based on vanilla models.
- Fixed #713 by reducing log verbosity with downgraded per-NPC INFO messages to DEBUG and
- Fixed #711 by reduced oversized startup/config log output.
- Fixed NBT validation guard to prevent unnecessary buffer allocations in production.
- Added model part name constants to EasyNPCModelManager for consistent usage across mixins.
- Improved RenderEntityTypeSupportConfig by enhancing filter logic and optimizing data structures
- Removed verbose debug logs that dump large data structures.
### 6.11.1
- Fixed #710 by improving backward-compatible parsing for recoverable trade data.
### 6.11.0
- Fixed #703 rendering issue with new custom layer system and hand renderings.
- Fixed #701 by adding additional safeguards and logging for invalid trading offers.
- Fixed smart animation not working properly with modified head position.
- Fixed head tracking by moving player detection back to server side-only.
- Fixed CustomLookAtPlayerGoal to better handle edge cases and reduce jitter.
- Fixed issue with Doppler NPCs keeping their hand inventory.
- Improved PoseManager logging message.
- Updated logo with a new design.
### 6.10.0
- Fixed #698 by adding try and catch for 3rd party entity creation.
- Fixed #695 by clearing model part rotations/positions when switching to a
DEFAULTvanilla pose. - Fixed #695 by applying lock rotation and pose animation only when the NPC is idle.
- Fixed #695 by correcting root rotation pivot to use actual bounding box height instead of 0.5f.
- Fixed multiple objective registration issues including inverted
isTargetedPlayercheck, wrong
targets.
- Fixed goal reference being retained after objective is unregistered.
- Removed auto-lock of ROOT rotation when loading poses; root lock is now user-controlled.
- Added lock rotation checkbox to the advanced and custom pose configuration screens.
- Added model-specific pose key filtering in
ConfigurationMenuHandlerfor the default pose screen. - Added unit tests for
CustomPosition,CustomRotation,CustomScale,ModelPose,
ModelAnimationBehavior and ModelAnimationData.- Added
NPCDataIsolationTestHelperand game tests for Fabric and Forge. - Increased max head yaw range from 60° to 65°.
### 6.9.0
- Fixed #692, #666 by adding caching and safeguards to prevent redundant retriggering of NPC entity
- Fixed #651, #617 by adding basic custom poses for all supported NPC types.
- Fixed #597 by adding additional Flee goals for fleeing from players, villagers, monsters, ...
- Fixed pose loading to read directly from mod resources instead of copying files to disk.
- Fixed duplicate
saveNPCcalls on entity join by checking existing registry entry first. - Added
despawnandspawncommands to remove and re-spawn NPCs by UUID with configurable removal
- Added
ModelPoseAPIandEasyNPCEntityHandlerpublic API classes for controlling NPC poses and
- Added pose data files for all supported NPC types.
- Added lock rotation checkbox to the basic pose configuration screen.
- Added
MoveToPositionGoalto move an NPC to a position before executing a callback action. - Added
EasyNPCLookControlandEasyNPCBodyRotationControlto respect locked root rotation. - Added synced owner change and dimension change to the NPC entity data index.
- Added EasyNPCItemAttachmentLayer into various entity renderers.
- Added dedicated
Flee Objectiveconfiguration tab with objectives for fleeing creepers, monsters,
- Added
FOLLOW_ITEMobjective to the follow objectives tab to make NPCs follow item entities by
minecraft:apple).- Added
LookAtEntityByUUIDGoaland enabled the look-at-entity-by-UUID and look-at-owner objectives
- Added
persistentflag toSynchedDataIndexso that transient indices (e.g. crossbow charge,
- Added configurable
customParticlesEnabledflag toSlimeBasefor API consumers. - Added
SoundType.PETand mappedCAT_PURRto the cat NPC for tamed ambient sound variety. - Reduced log verbosity for periodic NPC save operations from INFO to DEBUG.
### 6.8.3
- Fixed #680 by enforcing version miss-match by upgrading network protocol version.
- Fixed #679 by resetting position, rotation and size for name tag.
- Fixed #665 by adding multi state slide for root rotations.
- Fixed #664 by adding option to disable following mouse cursor for easier posing.
- Fixed #663 by improve support for X and Z root rotations.
- Fixed #661 by adding quick rotation with NPC wand and sneaking to the NPC to rotate the root to
- Fixed move tool is wrongly triggering interactions by adding check for move tool in interaction
- Fixed Preset Item is wrongly triggering interactions by adding check for preset item in
- Fixed Slime and Ghast hitbox and name tag position issues by adjusting bounding box and eye height
- Fixed Slime and Ghast GUI position by adjusting offset values.
### 6.8.2
- Fixed #677 by extending
SafeMerchantDatawith notifyTrade to avoid crashes. - Added progression data support for leveling up NPCs based on player interactions and actions.
- Added global NPC tracking system for better management and debugging of NPCs across the world.
- Added
OriginalModelConfig.withVariantTexture()option to allow using variant textures with the
### 6.8.1
- Fixed #676 by using existing preset helper method instead of custom one.
### 6.8.0 (Adding API support)
- Fixed #667 by adding warning messages and additional checks for invalid network packets.
- Fixed Horse spawn eggs model.
- Fixed pose support for allay, chicken, creeper, fox, ghast, horse, illager, iron golem, slime and
- Added NPC base classes for better API support.
- Added NPC raw classes for advanced API support.
- Added Slim and Ghast NPC types.
- Added Custom Model API for easier integration with other mods and custom models.
- Refactored internal data handling and registration for better maintainability and future
### 6.7.1
- Fixed #657 and #656 by adding additional client side checks for vanilla bug.
### 6.7.0
- Fixed #650 by implementing Wolf Leg Animations in setupAnim method.
- Fixed #648 by fixing canBeHitByProjectiles translation.
- Fixed #645 by adding
allowBypassInvulnerabilityconfig option to allow/deny bypassing
- Fixed delete button showing label even with small width.
- Fixed up and down buttons not positioned correctly in some cases.
- Fixed name tag showing up for dialog and configuration UI.
- Fixed distance action issue were multiple actions are not properly triggered.
- Fixed issues with NPC presets.
- Fixed Cat NPC and Wolf NPC owner data not syncing properly.
- Added preset browser for easier selection of common NPC presets.
- Added preset .snbt (text) export and import functionality for sharing NPC presets.
- Refactored existing NPC presets to use new .snbt format.
- Refactored spawner system to use new preset format for better maintainability and future
### 6.6.2
- Fixed #643 by rework scaling system.
- Fixed scaling not properly updating hitbox and nametag position after restart / reload.
- Added MID and MOUSE_OVER name tag visibility modes for finer control over NPC name display.
- Added team-based name tag visibility support respecting vanilla Team.
### 6.6.1
- Fixed #638 by refactored internal data handling for display attributes.
### 6.6.0
- Fixed #634 by implementing asynchronous texture loading with dedicated thread pool.
- Fixed texture loading blocking render thread causing game freezes.
- Fixed race conditions in texture reload protection using atomic operations.
- Fixed resource leaks in HTTP connections during remote texture downloads.
- Fixed URL validation spam allowing multiple simultaneous downloads of the same texture.
- Fixed exception handling for remote image validation preventing crashes on invalid URLs.
- Fixed
defineId called for:warning messages during NPC loading. - Refactored texture loading architecture with multi-level defense and rate limiting.
- Refactored entity data registration logic for better maintainability.
- Converted data classes to modern Java records for better immutability and thread-safety.
- Added thread-safe session server spam protection with ConcurrentHashMap.
- Added comprehensive error recovery with automatic cooldown reset on failures.
- Improved texture loading with 2-thread pool and 500ms rate limiting.
- Improved exception handling with specific catch blocks for IIOException and FileNotFoundException.
### 6.5.2
- Fixed Villager profession and job skin issue.
- Improved GitHub workflows by adding cache for gradle dependencies.
- Improved Gradle build time and cleanup tasks.
### 6.5.1
- Fixed #632 by implementing ON_KILL action type and event.
- Fixed #629 by improving texture handling performance, caching, and memory usage.
- Fixed kill command is not working on NPCs.
- Fixed texture reload protection preventing cache reload after eviction.
- Fixed WebP validation bug in remote image validator (missing return statement).
- Refactored texture handling logic for better maintainability and future improvements.
- Added time-based reload protection (60 seconds) to replace permanent blocking mechanism.
- Added missing variant textures for chicken, pig and wolf.
- Added additional unit tests for texture handling.
- Improved gradle build tasks.
### 6.5.0
- ⚠️ Removed jar-in-jar bundle approach for better mod compatibility and api capabilities.
- Fixed #627 scissor implementation for better compatibility with other mods.
- Fixed #625 lively animation issues when using rotated or moved model parts.
- Fixed default animation are canceled when using scaled model parts.
- Added better pose animation control with smart, default und none options.
### 6.4.1
- Fixed #626 screen switching logic for different NPC UUIDs, thanks to
Spawnbladefor the detailed
### 6.4.0
- Fixed #626 by improving dialog data validation and error handling.
- Fixed #623 by refactoring render data and render handling.
- Fixed #622 by making sure custom data are properly saved and loaded.
- Fixed open dialog action type to allow opening dialogs from other NPCs.
- Fixed hashing issues by adding missing equals and hashCode methods for ConditionDataSet and
- Added custom data test item for #622 and easier testing of custom data.
- Improved records and fixed potential issues with missing data.
### 6.3.0
- Refactored config ui specific components and removed them from the core mod.
- Fixed dialog data by filtering dialog data before sending to the client.
- Fixed dialog editor layout issues and improved usability.
- Fixed missing default values for some dialog data fields.
- Added dialog priority support to control the order of dialog execution.
- Added condition support for dialog and scoreboard actions.
- Added frequency support for dialog to limit how often an dialog can be shown.
- Added new NPC preset to for scoreboard and condition support.
- Improved dialog button data format by removing redundant fields.
### 6.2.0
- Fixed legacy custom name parsing.
- Fixed string injection within dialogs.
- Fixed missing translation for action types.
- Added scoreboard action type to increase, decrease, set scoreboard values.
- Added
@score(...)NPC macro to display scoreboard values in the dialog. - Added additional unit tests.
- Improved spin button with indicators and better usability.
### 6.1.2
- Fixed container and menu sync issues with missing close container packets.
- Fixed close button not working in some cases.
- Fixed jumping mouse cursor between screen transitions.
- Fixed translation files and removed duplicate and deprecated entries.
- Moved Easy NPC wand to existing core item tab instead of creating a new one.
- Added cat pose support for different model parts (except tail).
- Improved EasyNPCWand glowing effect performance by disabling it when not needed.
- Improved custom entity detection by excluding non-living entities like displays, makers, throwns
- Improved cat variant handling.
### 6.1.1
- Fixed #615 by checking if item is equipped in one of the hands.
- Fixed #612 by re-validating entity types.
- Fixed #610 by force sync of hat and head layers for specific models.
- Fixed orc textures.
- Fixed cat variant handling for 1.21.5.
- Fixed player render by adjusting render state
skinfield. - Fixed cat renderer by adjusting render state
texturefield. - Fixed position, scaling and rotation preview.
- Fixed Fairy model.
- Improved custom model support and performance, by moving related logic into to client side only.
- Improved caching of player to UUID mappings for player skins.
- Limited change model commands and logic to Doppler NPCs only.
- Added renderEntityRaw method to render NPC as-it-is.
### 6.1.0 ✨
This is a major release. Please back up your worlds and NPC data before updating. This version
contains many improvements, optimizations, and internal changes that are **not fully compatible**
with earlier releases.
⚠️ Breaking changes
- Existing NPCs and their configuration data from versions before 6.1.0 may not load correctly or
- Internal data formats and some behaviors have been refactored to support new use-cases.
🧩 New modular structure
Easy NPC is now split into three separate mods:
- Easy NPC** – Bundle that includes both Core and Configuration UI for a plug‑and‑play experience.
- Easy NPC: Core** – Lightweight runtime and logic for NPCs, with minimal dependencies. Intended
- Easy NPC: Configuration UI** – Standalone configuration interface for creating and editing NPCs.
🎯 Why this change?
- Allows servers and modpacks to ship only the **Core** mod on the server side for a leaner setup.
- Reduces memory usage and load times when the UI is not required everywhere.
- Makes development and testing faster by separating UI and core logic.
[history]: https://github.com/MarkusBordihn/BOs-Easy-NPC/commits/
[upgrade_guide]: https://github.com/MarkusBordihn/BOs-Easy-NPC/wiki/Upgrading
## Note
This change log includes the summarized changes. For the full changelog, please go to
the [GitHub History][history] instead.
Note: Please always back up your world / NPCs before updating to a new version!
Check the [upgrade guide][upgrade_guide] for more information.
### 7.14.0
- Fixed #846 by keeping custom poses for players who start seeing the NPC later.
- Fixed attribute and trading settings missing for players who start seeing the NPC later.
- Fixed changed max uses, XP and trading type not shown in the trading screens until reload.
- Fixed
/easy_npc sound setchanges not reaching players until the NPC was reloaded. - Added game tests that check NPC poses and settings after respawns and for new players.
### 7.13.0
- Fixed color and formatting tags in dialog button names showing as plain text.
- Fixed the button preview in the editor showing lowercase names as a raw translation key.
- Fixed the "Move EasyNPC" item not working for NPC owners outside of creative mode.
- Fixed
/easy_npc owner setreporting success even when the owner could not be changed. - Fixed the game crashing when the URL or player skin screen showed a skin download error.
- Fixed the preset browser search showing no results after scrolling down the list.
- Changed the network protocol version, so client and server must run the same mod version.
- Added
@initiator,@npcand@score()support to dialog button names to fix #841. - Added automatic client tests with the Client Runtime Interface Toolkit.
- Larger core refactoring and code cleanup.
### 7.12.2
- Fixed the Fairy hitbox being far too small, so its name tag and speech bubble sat in its body.
- Fixed scaled NPCs keeping their old hitbox and eye level, so hits, clicks and looking missed.
- Fixed oversized names, lists and NPC data in network packets being read without any limit.
- Fixed invalid NPC positions, scales, attributes, names and durations from being applied.
- Changed Fairy NPCs to take up the space of their model, so they collide and can be clicked.
- Changed Skeleton, Stray and Bogged NPCs to the vanilla hitbox height, they were slightly short.
- Changed the network protocol version, so client and server must run the same mod version.
### 7.12.1
- Fixed #836 by always showing "Restore", including datapack presets, with a reason tooltip.
- Fixed preset import and export messages missing, wrong or not warning about replaced NPCs.
- Fixed the preset browser reloading on each keystroke, leaking NPCs and clearing the selection.
- Fixed the preset list sorting, filter order and layout clipping options in small windows.
- Fixed
/easy_npc preset import datawithout a position importing it as a default preset. - Fixed spawn rate limit leaks, unstable preset IDs and "Spawn New" stacking NPCs on one spot.
- Changed "Restore" to refuse instead of spawning a copy when it is not permitted.
- Added sorting, a match count, reload, auto-close, the NPC ID and tooltips for presets and skins.
- Added
matching <pattern>batch imports with limits, a confirmation and a clickable position.
### 7.12.0
- Fixed #833 by showing Easy NPC Wand outlines only to the wand holder, owner and admins.
- Fixed #834 by adding "Set Home Here" and "Reset Home" buttons to the position configuration.
- Fixed #835 by keeping the NPC ID and position in exported presets, so imports restore the same
- Fixed preset imports and spawn eggs losing the owner's list entry and owner objectives.
- Fixed NPCs restored from an automatic backup losing their owner and becoming ownerless.
- Fixed selection lists showing only their first six entries and hiding the rest.
- Changed importing a preset to update the original NPC at its stored position instead of adding a
- Changed completed trades to play the "Trade completed" sound, which stayed silent before.
- Changed the API dialog call to report an unknown dialog label instead of always reporting success.
- Changed NPCs without arms to carry held items at the head or body instead of hiding them.
- Changed the optional Easy Model Entities dependency to require version 2.4.0 or newer.
- Added a "Sound" configuration with sounds for dialogs, speech, swimming, eating and fall damage.
- Added a searchable sound selection with volume and pitch sliders to the "Sound" configuration.
- Added a "Block Vehicles" option to keep NPCs out of boats, minecarts and modded chairs.
- Added the profession selection to all skin configurations and a new built-in skin per NPC type.
- Added client settings to hide name tags behind walls and
highlightEnabledfor wand outlines. - Added an "Exists" condition operation and API access to NPC movement, actions and presets.
### 7.11.0
- Fixed #828 by no longer freezing the server on logout when NPCs follow or watch the player.
- Fixed #831 by moving routine NPC removal messages to the debug log.
- Fixed #832 by making humanoid NPCs ignore custom player models, animations and poses.
- Fixed hourly NPC backups stuttering on large worlds and retaining timestamps of removed NPCs.
- Fixed hourly NPC backups losing the identity, owner and position of the backed-up NPC.
- Fixed owner-login restoration duplicating, repeatedly restoring, reviving or moving unloaded NPCs.
- Fixed NPC index and file synchronization issues causing lost NPCs, crashes or false warnings.
- Fixed stale NPC data after unloading, avoided redundant writes and added repeated-unload warnings.
- Fixed the preset browser failing to list custom and world presets saved in the SNBT format.
- Fixed speech bubbles losing their text and turning translucent with Iris shaders.
- Fixed the "Opacity" of an NPC being ignored while a shader pack is active.
- Fixed text formatting and macro parsing for translated speech bubbles and mod API texts.
- Fixed speech bubbles and their text staying hidden behind blocks while a shader pack is active.
- Added
minLightLevelto keep speech bubbles readable in dark surroundings.
### 7.10.0
- Fixed #829 by allowing bats and other non-walking mobs as the render entity of a Doppler NPC.
- Fixed NPCs rendered as a bat, frog or warden showing a static pose instead of their animation.
- Fixed the NPC name tag showing above the previews in the "Custom Models" configuration.
- Fixed speech bubbles being cut off by walls, doorframes and the NPC's own body.
- Fixed the previews in the "Custom Models" configuration.
- Changed the previews in the "Custom Models" configuration to stand on a common ground line.
- Changed overlapping speech bubbles to move apart and to stay visible when the NPC is off-screen.
- Changed "Navigation: Automatic" to use flying movement for NPCs rendered as a flying mob.
- Changed the render entity list to hide seats, paintings, thrown items and other non-mob entities.
- Added a "Min. hover height" slider for flying NPCs and client settings for speech bubbles.
### 7.9.0
- Fixed modded fish NPCs, like the ones of Tide 2, spinning around instead of swimming upright.
- Fixed "Navigation: Automatic" using ground movement for water NPCs and aquatic model NPCs.
- Fixed the "Random Swimming" objective never moving an NPC that uses aquatic navigation.
- Fixed a swimming NPC shaking or twitching in place instead of holding its tilt and swim depth.
- Fixed a swimming NPC turning in circles forever when it could not reach its next path point.
- Fixed an NPC that fell into water never getting out of it again.
- Fixed a following NPC searching a new path every tick while its target was unreachable.
- Fixed the "Move to" actions stopping short of a raised target or not starting while in the air.
- Fixed "Move back to Home" ignoring height differences and never returning from beyond 32 blocks.
- Fixed the "Opacity" input field being too narrow to show a value of 100.
- Fixed a damaged NPC with an Easy Model Entities model never flashing red.
- Changed modded water NPCs to swim level, vanilla water mobs keep their tilt as before.
- Changed the "Move to" actions to walk up to 48 blocks and to teleport only beyond that range.
- Changed "Move to" and "Move back to Home" to give up after three seconds without progress.
- Changed the timeout of a "Move to" action to count real ticks, it ran twice as long before.
- Changed a new "Random Swimming" objective to rank below following, fleeing and attack goals.
- Changed "Opacity" of an NPC with an Easy Model Entities model to be applied by that mod itself.
- Changed the minimum Easy Model Entities version to 2.3.0, older versions disable the integration.
- Added "Depth below surface" and "Height above floor" sliders for the swim level of an NPC.
- Added log entries for the NPC files written on a world save, with a warning above 250 ms each.
### 7.8.1
- Fixed #827 by rendering fish NPCs in water upright instead of always flopping on their side.
- Fixed #828 by keeping a damaged NPC from blocking the world save, it now falls back to defaults.
- Fixed a restored NPC picking up a random preset ID that changed with every save.
- Changed NPC data to only be written to disk when it actually changed.
### 7.8.0
- Fixed smaller text and UI issues.
- Changed an NPC that is already standing at its target position to finish the movement right away.
- Changed the "None" skin tab to "Advanced", which now holds "Disable Skin" and the texture field.
- Added a "Move to" action, which sends an NPC to a position, a player, its owner or its home.
- Added a "Move to and Wait" action, which runs the following actions only after the arrival.
- Added an arrival radius, a timeout and an optional teleport to both move actions.
- Added an "Opacity" attribute from 0 to 100, which fades body, armor and hand items together.
- Added a "Set Opacity" action, which turns an NPC into a ghost or hides it completely.
- Added the "Lantern Wraith" preset, a ghost walking a square with a short line at every corner.
- Added API access to the move actions and the opacity of an NPC.
- Added a "Resource Location" skin type, which renders any texture of a mod or a resource pack.
- Added an "Advanced" skin tab, which previews the NPC with the entered texture before applying it.
### 7.7.7
- Fixed #821 by keeping the transparency of 64x64 skins, which Fresh Moves needs for its eyes. Skins
- Fixed #818 by running trade actions for Villager and Wandering Trader NPCs as well.
- Fixed a dialog with several text variants switching its speech bubble size every second.
- Fixed the skin cache storing the processed image instead of the original download.
- Fixed the untranslated interval names, like
PER_DAY, of the "Execution Limit" condition. - Fixed the
sitanimation of Easy Model NPCs, which never used the built-in sitting pose. - Fixed the speech bubble being cut off by the head of an NPC when a player stood close to it.
- Changed speech bubbles to keep their screen size and to move down or aside when a player is close.
- Changed the speech bubble text to render 20% larger than a name tag.
- Changed a time based action set with a "Wait" action to run in order instead of picking one entry.
- Changed dialog texts to wrap later, so an existing dialog can switch to the wider screen layout.
- Changed fallback actions to skip screen actions without a player, like the regular actions do.
- Changed the minimum Easy Model Entities version to 2.1.0, older versions disable the integration.
- Added a "Wait" action, which pauses the following actions of an event for a chosen duration.
- Added the "Countdown Timekeeper" preset, a speech bubble count to ten ending in sound and sparks.
- Added scaling and rotation for Doppler NPCs behind the "Experimental Features" checkbox. Both only
- Added a "Sound" action, which plays a sound at the NPC with sound category, volume and pitch.
- Added "Every 5 Minutes" and "Every 15 Minutes" to the "Execution Limit" condition.
- Added a "Player Idle" condition, which checks how long a player has not moved.
- Added an "Immovable" attribute, which keeps an NPC in place against pushing and knockback.
- Added
/easy_npc pauseto pause a single NPC or all NPCs; the global pause ends with the server. - Added API access to the sound action, the pause state and the idle time of a player.
- Added a texture override per model slot for Easy Model NPCs over
/easy_npc render texture. - Added a "Repeat" playback mode with a count and a time limit to the "Play Animation" action.
- Added API access to animation variants, texture slots and textures of Easy Model NPCs.
### 7.6.0
- Fixed unclear mod conflict errors for duplicate entity data tracker IDs.
- Fixed third-party health bars rendering over NPC previews in configuration and dialog screens.
- Fixed Doppler and Easy Model Entities NPCs using default hitboxes instead of their model size.
- Fixed the
/easy_npccommands suggesting no NPC UUIDs at all on a server. - Fixed the pose list of the "Set Pose" action drawing over its input field.
- Fixed the untranslated "Loop", "After current" and "Action Data Type" labels of the action editor.
- Fixed the missing hint text of the "Chance" condition.
- Fixed long condition hints running out of the editor screen instead of wrapping.
- Fixed the misaligned help icons and text buttons of the "Message" action.
- Fixed changes to the "Set Pose", "Play Animation" and "Stop Animation" actions not being saveable.
- Fixed the speech bubble text sitting closer to its upper border than to its lower one.
- Changed the NPC suggestions to list the crosshair NPC first and only own NPCs without permissions.
- Changed a preset export to only store what differs from a new NPC, without position or owner.
- Changed a preset without objectives or actions to fall back to the defaults of its NPC type.
- Changed events without a player, like "On Spawn" or "On Kill", to check their conditions. An
- Changed a time based action to pick the owner as
@initiatorwhenever the owner is nearby. - Changed speech bubbles to stay visible from 5 up to 18 seconds, depending on the text length.
- Changed the "Set Pose" action to only show its input field for the "custom" pose entry.
- Added time based actions on five fixed steps, from every ~1 second up to every ~15 minutes.
- Added a "Message" action for chat, system message and speech bubble text without a command.
- Added text variants, a sender name, a recipient and translation keys to the "Message" action.
- Added the speech bubble graphic as
easy_npc:textures/gui/speech_bubble.pngfor resource packs. - Added a "Chance" condition in percent and a "Relationship" condition for owner and faction.
- Added spawn, owner login, state change, day / night, weather and the missing "On Trade" events.
- Added a base preset per NPC type under
easy_npc:api/preset/base/, usable as a parent preset. - Added the "Wandering Companion" preset, a talkative NPC built from time based messages.
- Added an action registry, an action handler, a preset validator and richer event data for mods.
- Added a tooltip with name, type and distance to every NPC suggestion of the
/easy_npccommands. - Improved the NPC suggestions, which appear without typing and tolerate a near miss of one block.
### 7.5.0
- Fixed the home position of an NPC always reading as unset, which hid "Home" in the configuration
- Fixed NPCs spawned from a preset, the preset browser or a respawn never getting a home position.
- Fixed an NPC spawned from the preset browser keeping the home position of the world the preset was
- Fixed NPCs being drawn as a white silhouette with a shadow in the configuration, skin and preset
- Fixed #814 by giving every Cobblemon NPC its own animation state instead of one per species.
- Fixed #813 by letting "Move back to Home" work at any distance instead of only near its home.
- Fixed #812 by checking once per session whether a player changed their skin.
- Fixed #810 by accepting Cobblemon aspects of resource packs instead of only "shiny" and "female".
- Fixed the server crashing when an NPC with a "Tempt" objective ticked its goals.
- Fixed flying NPCs like Allay, Vex and Ghast moving on the ground instead of flying.
- Fixed dialog, button, preset, pose and texture names with duplicates or special characters.
- Fixed conditions not being editable on a dedicated server and untranslated condition texts.
- Fixed Easy Model Entities NPCs not turning their head and their model list ignoring a
/reload. - Fixed the "Legacy Easy NPC Data" warning appearing for newly created NPCs.
- Fixed missing transparency corrections for old 64x32 skins, which showed layer artifacts.
- Fixed the player skin screen freezing for a moment while a player name was looked up.
- Fixed the "Reset look at ..." objective label, which read "Reset loot at ..." in some languages.
- Fixed the Fabric game tests, which crashed on start because of the development helper mods.
- Fixed NPCs losing their owner when they were spawned again after a despawn.
- Fixed objectives being deleted from an NPC when the mod providing them was missing at start.
- Fixed objectives being switched off for good when their target entity was missing.
- Fixed importing a preset without a stored id, which spawned an NPC without owner and home.
- Fixed "Follow owner" and "Look at owner" keeping their old target after the owner was changed.
- Fixed attack targets staying assigned to an NPC after the targeted entity was gone.
- Fixed the "Look at Item" objective, which could be stored but never did anything.
- Fixed walking animation for Doppler NPC and 3rd party models.
- Fixed Forge never running its server start-up step, which left NPC tracking, factions and the
- Fixed Forge development runs starting without any mixins, which disabled the vanilla entity
- Changed the movement objectives to a fixed order: flee, follow, return home, then stroll. NPCs
- Changed datapack presets to
easy_npc/preset/, the old folder still works, but only for easy_npc. - Changed the preset browser to always list its entries in the same order.
- Changed the required Easy Model Entities version to 1.7.0, floating models now hover by default.
- Removed the experimental user-defined NPCs; the extra config file is no longer read or created.
- Removed the unused
SERVER_SKINskin type. - Added new gametest strcuture to support gametest in 1.21.11 and higher.
- Added a reload button to each entry of the player skin screen, to fetch a single skin again.
- Added the reason to the log whenever an NPC is removed, so an unexpected despawn can be traced.
- Added suggestions to
/easy_npc render set species. - Added support for presets from other mods, which no longer have to use the
easy_npcnamespace. - Added a preset visibility that hides a preset from the preset browser and the NPC screens.
- Added a teleport distance and a resting spot offset to the follow objectives.
- Added item tags, a "can be scared" option and a "only without owner" option to "Follow item".
- Added an item field to the look objectives, so an NPC can watch a chosen dropped item.
- Added an identifier per NPC, so a mod can find its own NPCs again.
- Added an option to spawn an NPC again when its owner logs in.
- Added NPC states with number, yes/no and text values, usable as condition, action and command.
- Added a "Navigation" and a "Hover height" setting to switch any NPC between ground and flying.
- Added a parent preset reference, so a preset can build on another one and only override changes.
- Added the state driven "Forge Keeper" preset.
- Added custom conditions and dialog, action and state events for other mods.
- Added "On Far Distance" as a distance action, which triggers at 32 blocks.
- Added game tests for NeoForge, which had none, and restored the spawn egg, dialog screen, data
- Added game tests for every configuration and editor screen, covering all three mod loaders.
- Added game tests for the home position, covering the spawn default, the stored value and
- Improved the model name parsing, which mistook a species ending in "_shiny" for a variant.
- Improved following of flying NPCs, which now steer directly when there is no path through the air.
- Improved floating Easy Model Entities models, which now bob up and down.
- Improved third party support with an API for presets, own objectives and objective configuration.
### 7.4.0
- Fixed #807 by no longer pulling every same-type NPC within 32 blocks into a "Defend Self" fight.
- Fixed #805 by evaluating all visibility settings together instead of stopping at the first one.
- Fixed #804 by keeping the custom name on Doppler NPCs for name based textures and the name tag.
- Fixed #803 by adjusting assets to match typical Minecraft style instead of generic UI style.
- Fixed the day and night detection, which counted sunrise as night and sunset as day.
- Fixed the visibility in the Nether and the End, which used the Overworld time.
- Fixed the time and game mode visibility checkboxes appearing in a random order.
- Fixed game tests only being able to fail on their first assertion, which hid later failures.
- Fixed the "Saddled" horse skin variants, which never showed a saddle.
- Changed "Visible to Owner" and "Visible to Team" to also follow day, night and game mode.
- Changed Evoker, Illusioner and Vindicator variants without "Crossed Arms" to keep their arms down.
- Added a "Defend Faction" objective that attacks whoever hurt a nearby faction member or player.
- Added a system message when faction members fight each other and the faction stays out of it.
- Added a head equipment slot for Illagers so their captain banner can be removed or swapped.
- Added a day and night preview to the display configuration screen.
- Added unit and game tests for the visibility attributes and the faction defense.
- Improved the visibility check performance by reading the display attributes only once per check.
- Improved display attributes from older versions by completing them with their defaults.
- Improved the attack objective screen by disabling "Protect Owner" and "Defend Faction" when unset.
### 7.3.0
- Improved skin variants by carrying their data as typed fields instead of parsing variant names.
- Centralized the Cobblemon mod id and default model on shared constants.
- Reduced duplicated enum code with a shared
EnumUtilshelper forget(String)lookups. - Optimized villager profession and type lookups to use direct registry keys instead of scans.
- Optimized enum name lookups by caching tag names, ids and keys once at construction.
- Added unit and game tests for skin variants, villager resolution and the enum helper.
### 7.2.0
- Fixed #801 by using combination for NPC, Dialog and Action UUIDs to avoid collisions for action
### 7.1.1
- Fixed #800 by lazy loading entity types.
- Fixed #799 by fixing edge cases and adding additional documentation and better log messages.
- Fixed #798 by considering console, commands and command blocks as trusted command sources.
- Fixed a critical single-player / LAN issue where client and server NPCs shared the same registry.
- Fixed a memory leak in the configuration menu handling and added timeout and disconnect cleanup.
- Fixed duplicate downloads when several NPCs request the same skin at the same time.
- Fixed skin lookups failing after a error so a slow server no longer freezes the game.
- Fixed the URL skin screen freezing the game while checking a remote image; the check now runs in
- Added a new World Spawner block that limits an NPC preset across the whole world (all dimensions),
- Hardened remote skin downloads with a strict size limit and safe redirect handling to prevent
blockPrivateAddresses setting.- Improved server performance by only sending entity and player load events to NPCs that actually
### 7.0.0
- Fixed #794 by using the expected type for NPC rendering.
- Fixed #791 by adding Wandering Trader NPC type.
- Fixed #788 by extending the AI safeguards to Epic Fight and raw NPC variants (Piglin, Villager,
- Fixed #787, #531, #237 and #184 by adding a faction system with
/easy_npc factioncommands,
- Fixed #787, #771 and #572 by adding a new
targetobjectives tab to attack hostile factions or
- Fixed #786 by adding gender and shiny model variants for Cobblemon NPCs, searchable via
female
shiny in the model selection.- Fixed faction combat between invulnerable NPCs by adding the new
Attackable by Factionscombat
- Fixed Cobblemon model selection previews for oversized species by scaling with Cobblemon's own
- Fixed faction management edge cases by validating faction names, sorting faction lists and
- Fixed custom skin reloads by loading and clearing texture caches per skin model instead of always
- Improved the
Attackable by Players/Monsters/Factionscombat attributes to work independently of
Invulnerable, each opening a targeted hole for its own attacker group.- Improved preset command and network handling by splitting the large handlers into smaller focused
- Added Easy Model Entities Support.
- Added faction manager and faction editor screens to create, color and delete factions and manage
FACTION_MANAGEMENT security feature.- Added new
Miscattributes tab as home for the NPC faction assignment. - Added reusable warning and help icon components for inline hints with tooltips.
- Added additional unit and game tests for factions, target objectives and Cobblemon model variants.
### 6.25.0
- Fixed #782, #636, #622 by preserving data components during validations.
- Fixed #780 by caching remote texture downloads and reducing duplicate registrations.
- Fixed #767 by clamping attribute sliders against extreme values from other mods.
- Fixed #754 by adding custom data item matching for NPCs with actions and conditions.
- Fixed texture manager running in the wrong thread may cause crashes and deadlocks in >= 1.21.x.
- Fixed empty UUID handling for action conditions.
- Fixed execution limit reset for actions.
- Added texture registration queue to avoid multiple simultaneous downloads in the same tick.
- Added NPC coin, key and red token as consumable items for NPCs with actions and conditions.
- Added
Welcome Coin Traderas example NPC preset with custom coin, key and red token item data. - Added attribute safeguards against extreme values from other mods.
- Increased fallback max health value from 1024 to 4096 for high-health NPCs.
- Improved texture manager by reducing duplicate texture checks and registrations.
### 6.24.0
- Fixed #459, #775 by adding an option to block interactions with invisible NPCs.
- Fixed #774 startup crash related to optional Epic Fight and Cobblemon entity type maps.
- Fixed #773 by checking timed trade resets during base ticks and before opening trade screens.
- Fixed trade reset timing by increasing internal tickers correctly.
- Added time of day and weather conditions for #459.
- Added additional unit and game tests for trade resets, ticker handling and entity attributes.
- Added
Skywatch Scoutas example NPC preset with time of day and weather conditions.
### 6.23.0
- Fixed #772 by adjusting texture retries with 403 and 404 errors and lowering logging.
- Fixed #770 item rendering for Epic Fight NPCs (Evoker, Pillager, Vindicator and humanoid skins).
- Fixed #769 door loops with NPCs not reliably opening or closing doors.
- Fixed #760 by adding a dialog option and config setting (buttonConditionMode: LOCK or HIDE) to
- Fixed #709 by adding color picker popup for names with 32 colors and/or a manual RGB/hex value.
- Fixed NPC name color being reset when renaming without a specified color by preserving the
- Improved the door movement attributes so "Pass Door" is automatically enabled while "Open Door"
### 6.22.0
- Fixed #766 by passing the full server player context to command execution for better compatibility
- Fixed #764 by adding entity health, npc health conditions and NPC preset
Grukk, the Sparring Post as example for using these conditions.- Fixed #763 by making sure dialog button execution limits are now recorded.
- Fixed #758 by providing a example NPC preset named
One Wish Companion. - Fixed crashes related to 3rd party villager AI reading non-registered brain memories on Easy NPC
- Fixed Dialog buttons are not locked for server-side data as preparation for #760 and #644.
- Fixed #628 by adding conditional dialog opening support / command for better control over when
- Added brain AI for Piglin and Piglin Brute NPCs and registered the full vanilla brain memory set.
- Added additional guns to the gun tag for #757.
- Added a new "Open Dialog (Conditional)" action that opens a named dialog only if its conditions
- Added new entity health and npc health conditions for actions, dialogs and dialogs buttons.
- Added Piglin, Piglin Brute and Zombified Piglin NPCs invulnerable, for consistency with other
- Added a new "Knockback Immunity" combat attribute that prevents the NPC from being knocked back by
- Added a new "Explosion Immunity" combat attribute that makes the NPC immune to explosion damage
- Moved the "Projectile Collision" attribute to the Combat attribute screen, where it fits better
### 6.21.0
- Fixed item attachment for Illagers in crossed-arms pose.
- Fixed broken illager crossbow attack goal.
- Fixed crashes related to 3rd party items which are not renderable as hand items #756.
- Fixed crashes related to 3rd party mixins trying to access non-existing model parts #756.
- Fixed log.info spam message by reducing log verbosity and adding additional checks for custom
- Improved EasyNPCModelManager performance.
- Refactored NPC renderers to remove default hand item layer.
### 6.20.0
- Fixed crashes related to 3rd mods trying to access non-existing NPCs goals.
### 6.19.0
Note: This update adjusted the dialog background images by 10x6 pixels, which may require users to
adjust their custom dialog backgrounds if they are using custom ones.
- Fixed #752, #130 by adding dialog button condition support to allow to disable buttons.
- Fixed #683, #215 by adding typewriter effect support for dialog text.
- Fixed #690, #309 by allowing conditions for dialog, dialog buttons and interactions.
- Fixed smaller UI issues with dialog screen layout and background.
- Refactored dialog background images by 10x6 pixels on each side.
- Refactored dialog screen layout to better fit the new background size and improve appearance.
- Added typewriter effect and client configuration for dialog text.
- Added condition symbols to indicate the condition status for dialog, buttons and interactions.
- Added amount field for item conditions to allow checking for specific amounts of items.
- Added
Threshold Wardenas example NPC preset with various conditions and actions. - Added smaller bug fixes and optimizations related to dialog conditions and button states.
### 6.18.0
Note: This update changes the internal data format for conditions and actions, which may reset /
remove legacy existing execution-limit entries without stored IDs.
- Fixed #745 by adding conditions for actions to allow more complex and dynamic behavior.
- Fixed #652 by adding dialog button tooltip for longer texts.
- Fixed #687 by adding command value tooltip to show the full value.
- Added Experience Level conditions.
- Added Game-mode conditions.
- Added has item in inventory condition.
- Added has item in hand condition with (main hand and off-hand) support.
- Added player health condition.
- Added player tag condition.
- Added player team condition.
- Added Goldmere example NPC preset with various conditions and actions.
- Added negative condition support to allow negating conditions for more complex logic.
- Removed parameter pseudo IDs for
ActionDataEntryand replaced them with random UUIDs. - Refactored condition system to allow more condition types.
### 6.17.0
- Fixed #738 by adding additional tooltips for "Execute as player"
- Fixed to detailed logs by reducing log.info messages during startup and in-game.
- Added additional unit and game-tests.
### 6.16.0
- Fixed #732 by providing option to disable ESC key and close button for dialogs.
- Fixed #723 by avoid auto-close in specific cases like trading screens.
- Added general dialog configuration options to allow users to customize dialog behavior.
- Added avatar scaling and position offset options for dialogs.
- Added missing translation keys.
### 6.15.0 (Trades, Player Heads, Epic Fight and QOL updates)
- Fixed #731 by resyncing species data, if species list is empty on the client.
- Fixed #730 by improving Epic Fight integration and enabled experimental features.
- Fixed #729 by making sure trade uses are stored correctly.
- Fixed #728 by adding custom head support for player heads.
- Fixed #689 by showing remaining trade uses and allow resetting manually and automatically.
- Fixed #218 and #132 with new trade configuration screen and better support for custom trades.
- Fixed trade specific edge by switching between basic and normal/advanced trading mode.
- Fixed dialog button text is truncated with tooltip showing the full text.
- Fixed Cobblemon animation issues by syncing animation state with Cobblemon Animation System.
- Added per trade specific actions to allow users triggering actions after buys.
- Added trade reset button to reset all trades easily.
- Added trade usage information to trade configuration screen.
- Added experimental feature state to allow users to manually enable experimental features.
- Added Griselda Grindstone as example trader with actions.
- Cleanup test files.
### 6.14.0
- Fixed #727 by making sure changes are synced to the client when changing values.
- Fixed #726 by adding additional allow lists for specific commands.
- Fixed #686, #389, #304, #211 by adding basic Cobblemon support with Cobblemon NPC.
- Fixed dialog misalignment and navigation issues by adjusting dialog sprites and screens.
- Fixed x and z root rotation by correcting rotation logic and pivot calculations.
- Added basic Cobblemon support with custom NPC type and model for testing.
### 6.13.0 (Security and Permissions Updates)
Notes: This update includes better security checks and permissions for multiplayer environments. It
allows to execute server commands which can be potentially dangerous if used with malicious intent.
- The update splits the model root data and logic from the rest of the model part data and logic,
- Fixed #725 by separating model root data and logic from the rest of the model part data and logic.
- Fixed #722 by supporting .sbnt files as local presets.
- Fixed #675 by adding dedicated assets for dialog and config screen backgrounds.
- Fixed #605, #532, #529 with new security checks and permissions system.
- Fixed #469, #311 by adding experimental api documentation and examples for custom model support.
- Fixed double rendering of config screen background by removing redundant background rendering.
- Fixed Ghast and Slime hitbox and name tag position issues by adjusting bounding box.
- ⚠️ Added security checks to prevent potential exploits and allow safe usage in multiplayer
- Replaced dynamic dialog screen background with a static one for better performance, customization
- Replaced dynamic config screen background with a static one for better performance.
- Refactored config-ui specific components and removed them from the core mod.
- Removed duplicated sprite sheets.
- Prepare permission system for possible Luck Perms integration in the future like #712.
- General code cleanup and optimizations related to config screen rendering and assets.
### 6.12.0
- Fixed #714 by adding additional checks for custom model part list based on vanilla models.
- Fixed #713 by reducing log verbosity with downgraded per-NPC INFO messages to DEBUG and
- Fixed #711 by reduced oversized startup/config log output.
- Fixed NBT validation guard to prevent unnecessary buffer allocations in production.
- Added model part name constants to EasyNPCModelManager for consistent usage across mixins.
- Improved RenderEntityTypeSupportConfig by enhancing filter logic and optimizing data structures
- Removed verbose debug logs that dump large data structures.
### 6.11.1
- Fixed #710 by improving backward-compatible parsing for recoverable trade data.
### 6.11.0
- Fixed #703 rendering issue with new custom layer system and hand renderings.
- Fixed #701 by adding additional safeguards and logging for invalid trading offers.
- Fixed smart animation not working properly with modified head position.
- Fixed head tracking by moving player detection back to server side-only.
- Fixed CustomLookAtPlayerGoal to better handle edge cases and reduce jitter.
- Fixed issue with Doppler NPCs keeping their hand inventory.
- Improved PoseManager logging message.
- Updated logo with a new design.
### 6.10.0
- Fixed #698 by adding try and catch for 3rd party entity creation.
- Fixed #695 by clearing model part rotations/positions when switching to a
DEFAULTvanilla pose. - Fixed #695 by applying lock rotation and pose animation only when the NPC is idle.
- Fixed #695 by correcting root rotation pivot to use actual bounding box height instead of 0.5f.
- Fixed multiple objective registration issues including inverted
isTargetedPlayercheck, wrong
targets.
- Fixed goal reference being retained after objective is unregistered.
- Removed auto-lock of ROOT rotation when loading poses; root lock is now user-controlled.
- Added lock rotation checkbox to the advanced and custom pose configuration screens.
- Added model-specific pose key filtering in
ConfigurationMenuHandlerfor the default pose screen. - Added unit tests for
CustomPosition,CustomRotation,CustomScale,ModelPose,
ModelAnimationBehavior and ModelAnimationData.- Added
NPCDataIsolationTestHelperand game tests for Fabric and Forge. - Increased max head yaw range from 60° to 65°.
### 6.9.0
- Fixed #692, #666 by adding caching and safeguards to prevent redundant retriggering of NPC entity
- Fixed #651, #617 by adding basic custom poses for all supported NPC types.
- Fixed #597 by adding additional Flee goals for fleeing from players, villagers, monsters, ...
- Fixed pose loading to read directly from mod resources instead of copying files to disk.
- Fixed duplicate
saveNPCcalls on entity join by checking existing registry entry first. - Added
despawnandspawncommands to remove and re-spawn NPCs by UUID with configurable removal
- Added
ModelPoseAPIandEasyNPCEntityHandlerpublic API classes for controlling NPC poses and
- Added pose data files for all supported NPC types.
- Added lock rotation checkbox to the basic pose configuration screen.
- Added
MoveToPositionGoalto move an NPC to a position before executing a callback action. - Added
EasyNPCLookControlandEasyNPCBodyRotationControlto respect locked root rotation. - Added synced owner change and dimension change to the NPC entity data index.
- Added EasyNPCItemAttachmentLayer into various entity renderers.
- Added dedicated
Flee Objectiveconfiguration tab with objectives for fleeing creepers, monsters,
- Added
FOLLOW_ITEMobjective to the follow objectives tab to make NPCs follow item entities by
minecraft:apple).- Added
LookAtEntityByUUIDGoaland enabled the look-at-entity-by-UUID and look-at-owner objectives
- Added
persistentflag toSynchedDataIndexso that transient indices (e.g. crossbow charge,
- Added configurable
customParticlesEnabledflag toSlimeBasefor API consumers. - Added
SoundType.PETand mappedCAT_PURRto the cat NPC for tamed ambient sound variety. - Reduced log verbosity for periodic NPC save operations from INFO to DEBUG.
### 6.8.3
- Fixed #680 by enforcing version miss-match by upgrading network protocol version.
- Fixed #679 by resetting position, rotation and size for name tag.
- Fixed #665 by adding multi state slide for root rotations.
- Fixed #664 by adding option to disable following mouse cursor for easier posing.
- Fixed #663 by improve support for X and Z root rotations.
- Fixed #661 by adding quick rotation with NPC wand and sneaking to the NPC to rotate the root to
- Fixed move tool is wrongly triggering interactions by adding check for move tool in interaction
- Fixed Preset Item is wrongly triggering interactions by adding check for preset item in
- Fixed Slime and Ghast hitbox and name tag position issues by adjusting bounding box and eye height
- Fixed Slime and Ghast GUI position by adjusting offset values.
### 6.8.2
- Fixed #677 by extending
SafeMerchantDatawith notifyTrade to avoid crashes. - Added progression data support for leveling up NPCs based on player interactions and actions.
- Added global NPC tracking system for better management and debugging of NPCs across the world.
- Added
OriginalModelConfig.withVariantTexture()option to allow using variant textures with the
### 6.8.1
- Fixed #676 by using existing preset helper method instead of custom one.
### 6.8.0 (Adding API support)
- Fixed #667 by adding warning messages and additional checks for invalid network packets.
- Fixed Horse spawn eggs model.
- Fixed pose support for allay, chicken, creeper, fox, ghast, horse, illager, iron golem, slime and
- Added NPC base classes for better API support.
- Added NPC raw classes for advanced API support.
- Added Slim and Ghast NPC types.
- Added Custom Model API for easier integration with other mods and custom models.
- Refactored internal data handling and registration for better maintainability and future
### 6.7.1
- Fixed #657 and #656 by adding additional client side checks for vanilla bug.
### 6.7.0
- Fixed #650 by implementing Wolf Leg Animations in setupAnim method.
- Fixed #648 by fixing canBeHitByProjectiles translation.
- Fixed #645 by adding
allowBypassInvulnerabilityconfig option to allow/deny bypassing
- Fixed delete button showing label even with small width.
- Fixed up and down buttons not positioned correctly in some cases.
- Fixed name tag showing up for dialog and configuration UI.
- Fixed distance action issue were multiple actions are not properly triggered.
- Fixed issues with NPC presets.
- Fixed Cat NPC and Wolf NPC owner data not syncing properly.
- Added preset browser for easier selection of common NPC presets.
- Added preset .snbt (text) export and import functionality for sharing NPC presets.
- Refactored existing NPC presets to use new .snbt format.
- Refactored spawner system to use new preset format for better maintainability and future
### 6.6.2
- Fixed #643 by rework scaling system.
- Fixed scaling not properly updating hitbox and nametag position after restart / reload.
- Added MID and MOUSE_OVER name tag visibility modes for finer control over NPC name display.
- Added team-based name tag visibility support respecting vanilla Team.
### 6.6.1
- Fixed #638 by refactored internal data handling for display attributes.
### 6.6.0
- Fixed #634 by implementing asynchronous texture loading with dedicated thread pool.
- Fixed texture loading blocking render thread causing game freezes.
- Fixed race conditions in texture reload protection using atomic operations.
- Fixed resource leaks in HTTP connections during remote texture downloads.
- Fixed URL validation spam allowing multiple simultaneous downloads of the same texture.
- Fixed exception handling for remote image validation preventing crashes on invalid URLs.
- Fixed
defineId called for:warning messages during NPC loading. - Refactored texture loading architecture with multi-level defense and rate limiting.
- Refactored entity data registration logic for better maintainability.
- Converted data classes to modern Java records for better immutability and thread-safety.
- Added thread-safe session server spam protection with ConcurrentHashMap.
- Added comprehensive error recovery with automatic cooldown reset on failures.
- Improved texture loading with 2-thread pool and 500ms rate limiting.
- Improved exception handling with specific catch blocks for IIOException and FileNotFoundException.
### 6.5.2
- Fixed Villager profession and job skin issue.
- Improved GitHub workflows by adding cache for gradle dependencies.
- Improved Gradle build time and cleanup tasks.
### 6.5.1
- Fixed #632 by implementing ON_KILL action type and event.
- Fixed #629 by improving texture handling performance, caching, and memory usage.
- Fixed kill command is not working on NPCs.
- Fixed texture reload protection preventing cache reload after eviction.
- Fixed WebP validation bug in remote image validator (missing return statement).
- Refactored texture handling logic for better maintainability and future improvements.
- Added time-based reload protection (60 seconds) to replace permanent blocking mechanism.
- Added missing variant textures for chicken, pig and wolf.
- Added additional unit tests for texture handling.
- Improved gradle build tasks.
### 6.5.0
- ⚠️ Removed jar-in-jar bundle approach for better mod compatibility and api capabilities.
- Fixed #627 scissor implementation for better compatibility with other mods.
- Fixed #625 lively animation issues when using rotated or moved model parts.
- Fixed default animation are canceled when using scaled model parts.
- Added better pose animation control with smart, default und none options.
### 6.4.1
- Fixed #626 screen switching logic for different NPC UUIDs, thanks to
Spawnbladefor the detailed
### 6.4.0
- Fixed #626 by improving dialog data validation and error handling.
- Fixed #623 by refactoring render data and render handling.
- Fixed #622 by making sure custom data are properly saved and loaded.
- Fixed open dialog action type to allow opening dialogs from other NPCs.
- Fixed hashing issues by adding missing equals and hashCode methods for ConditionDataSet and
- Added custom data test item for #622 and easier testing of custom data.
- Improved records and fixed potential issues with missing data.
### 6.3.0
- Refactored config ui specific components and removed them from the core mod.
- Fixed dialog data by filtering dialog data before sending to the client.
- Fixed dialog editor layout issues and improved usability.
- Fixed missing default values for some dialog data fields.
- Added dialog priority support to control the order of dialog execution.
- Added condition support for dialog and scoreboard actions.
- Added frequency support for dialog to limit how often an dialog can be shown.
- Added new NPC preset to for scoreboard and condition support.
- Improved dialog button data format by removing redundant fields.
### 6.2.0
- Fixed legacy custom name parsing.
- Fixed string injection within dialogs.
- Fixed missing translation for action types.
- Added scoreboard action type to increase, decrease, set scoreboard values.
- Added
@score(...)NPC macro to display scoreboard values in the dialog. - Added additional unit tests.
- Improved spin button with indicators and better usability.
### 6.1.2
- Fixed container and menu sync issues with missing close container packets.
- Fixed close button not working in some cases.
- Fixed jumping mouse cursor between screen transitions.
- Fixed translation files and removed duplicate and deprecated entries.
- Moved Easy NPC wand to existing core item tab instead of creating a new one.
- Added cat pose support for different model parts (except tail).
- Improved EasyNPCWand glowing effect performance by disabling it when not needed.
- Improved custom entity detection by excluding non-living entities like displays, makers, throwns
- Improved cat variant handling.
### 6.1.1
- Fixed #615 by checking if item is equipped in one of the hands.
- Fixed #612 by re-validating entity types.
- Fixed #610 by force sync of hat and head layers for specific models.
- Fixed orc textures.
- Fixed cat variant handling for 1.21.5.
- Fixed player render by adjusting render state
skinfield. - Fixed cat renderer by adjusting render state
texturefield. - Fixed position, scaling and rotation preview.
- Fixed Fairy model.
- Improved custom model support and performance, by moving related logic into to client side only.
- Improved caching of player to UUID mappings for player skins.
- Limited change model commands and logic to Doppler NPCs only.
- Added renderEntityRaw method to render NPC as-it-is.
### 6.1.0 ✨
This is a major release. Please back up your worlds and NPC data before updating. This version
contains many improvements, optimizations, and internal changes that are **not fully compatible**
with earlier releases.
⚠️ Breaking changes
- Existing NPCs and their configuration data from versions before 6.1.0 may not load correctly or
- Internal data formats and some behaviors have been refactored to support new use-cases.
🧩 New modular structure
Easy NPC is now split into three separate mods:
- Easy NPC** – Bundle that includes both Core and Configuration UI for a plug‑and‑play experience.
- Easy NPC: Core** – Lightweight runtime and logic for NPCs, with minimal dependencies. Intended
- Easy NPC: Configuration UI** – Standalone configuration interface for creating and editing NPCs.
🎯 Why this change?
- Allows servers and modpacks to ship only the **Core** mod on the server side for a leaner setup.
- Reduces memory usage and load times when the UI is not required everywhere.
- Makes development and testing faster by separating UI and core logic.
[history]: https://github.com/MarkusBordihn/BOs-Easy-NPC/commits/
[upgrade_guide]: https://github.com/MarkusBordihn/BOs-Easy-NPC/wiki/Upgrading
## Note
This change log includes the summarized changes. For the full changelog, please go to
the [GitHub History][history] instead.
Note: Please always back up your world / NPCs before updating to a new version!
Check the [upgrade guide][upgrade_guide] for more information.
### 7.14.0
- Fixed #846 by keeping custom poses for players who start seeing the NPC later.
- Fixed attribute and trading settings missing for players who start seeing the NPC later.
- Fixed changed max uses, XP and trading type not shown in the trading screens until reload.
- Fixed
/easy_npc sound setchanges not reaching players until the NPC was reloaded. - Added game tests that check NPC poses and settings after respawns and for new players.
### 7.13.0
- Fixed color and formatting tags in dialog button names showing as plain text.
- Fixed the button preview in the editor showing lowercase names as a raw translation key.
- Fixed the "Move EasyNPC" item not working for NPC owners outside of creative mode.
- Fixed
/easy_npc owner setreporting success even when the owner could not be changed. - Fixed the game crashing when the URL or player skin screen showed a skin download error.
- Fixed the preset browser search showing no results after scrolling down the list.
- Changed the network protocol version, so client and server must run the same mod version.
- Added
@initiator,@npcand@score()support to dialog button names to fix #841. - Added automatic client tests with the Client Runtime Interface Toolkit.
- Larger core refactoring and code cleanup.
### 7.12.2
- Fixed the Fairy hitbox being far too small, so its name tag and speech bubble sat in its body.
- Fixed scaled NPCs keeping their old hitbox and eye level, so hits, clicks and looking missed.
- Fixed oversized names, lists and NPC data in network packets being read without any limit.
- Fixed invalid NPC positions, scales, attributes, names and durations from being applied.
- Changed Fairy NPCs to take up the space of their model, so they collide and can be clicked.
- Changed Skeleton, Stray and Bogged NPCs to the vanilla hitbox height, they were slightly short.
- Changed the network protocol version, so client and server must run the same mod version.
### 7.12.1
- Fixed #836 by always showing "Restore", including datapack presets, with a reason tooltip.
- Fixed preset import and export messages missing, wrong or not warning about replaced NPCs.
- Fixed the preset browser reloading on each keystroke, leaking NPCs and clearing the selection.
- Fixed the preset list sorting, filter order and layout clipping options in small windows.
- Fixed
/easy_npc preset import datawithout a position importing it as a default preset. - Fixed spawn rate limit leaks, unstable preset IDs and "Spawn New" stacking NPCs on one spot.
- Changed "Restore" to refuse instead of spawning a copy when it is not permitted.
- Added sorting, a match count, reload, auto-close, the NPC ID and tooltips for presets and skins.
- Added
matching <pattern>batch imports with limits, a confirmation and a clickable position.
### 7.12.0
- Fixed #833 by showing Easy NPC Wand outlines only to the wand holder, owner and admins.
- Fixed #834 by adding "Set Home Here" and "Reset Home" buttons to the position configuration.
- Fixed #835 by keeping the NPC ID and position in exported presets, so imports restore the same
- Fixed preset imports and spawn eggs losing the owner's list entry and owner objectives.
- Fixed NPCs restored from an automatic backup losing their owner and becoming ownerless.
- Fixed selection lists showing only their first six entries and hiding the rest.
- Changed importing a preset to update the original NPC at its stored position instead of adding a
- Changed completed trades to play the "Trade completed" sound, which stayed silent before.
- Changed the API dialog call to report an unknown dialog label instead of always reporting success.
- Changed NPCs without arms to carry held items at the head or body instead of hiding them.
- Changed the optional Easy Model Entities dependency to require version 2.4.0 or newer.
- Added a "Sound" configuration with sounds for dialogs, speech, swimming, eating and fall damage.
- Added a searchable sound selection with volume and pitch sliders to the "Sound" configuration.
- Added a "Block Vehicles" option to keep NPCs out of boats, minecarts and modded chairs.
- Added the profession selection to all skin configurations and a new built-in skin per NPC type.
- Added client settings to hide name tags behind walls and
highlightEnabledfor wand outlines. - Added an "Exists" condition operation and API access to NPC movement, actions and presets.
### 7.11.0
- Fixed #828 by no longer freezing the server on logout when NPCs follow or watch the player.
- Fixed #831 by moving routine NPC removal messages to the debug log.
- Fixed #832 by making humanoid NPCs ignore custom player models, animations and poses.
- Fixed hourly NPC backups stuttering on large worlds and retaining timestamps of removed NPCs.
- Fixed owner-login restoration duplicating, repeatedly restoring, reviving or moving unloaded NPCs.
- Fixed NPC index and file synchronization issues causing lost NPCs, crashes or false warnings.
- Fixed stale NPC data after unloading, avoided redundant writes and added repeated-unload warnings.
- Fixed the preset browser failing to list custom and world presets saved in the SNBT format.
- Fixed speech bubbles losing their text and turning translucent with Iris shaders.
- Fixed text formatting and macro parsing for translated speech bubbles and mod API texts.
- Added
minLightLevelto keep speech bubbles readable in dark surroundings.
### 7.10.0
- Fixed #829 by allowing bats and other non-walking mobs as the render entity of a Doppler NPC.
- Fixed NPCs rendered as a bat, frog or warden showing a static pose instead of their animation.
- Fixed the NPC name tag showing above the previews in the "Custom Models" configuration.
- Fixed speech bubbles being cut off by walls, doorframes and the NPC's own body.
- Fixed the previews in the "Custom Models" configuration.
- Changed the previews in the "Custom Models" configuration to stand on a common ground line.
- Changed overlapping speech bubbles to move apart and to stay visible when the NPC is off-screen.
- Changed "Navigation: Automatic" to use flying movement for NPCs rendered as a flying mob.
- Changed the render entity list to hide seats, paintings, thrown items and other non-mob entities.
- Added a "Min. hover height" slider for flying NPCs and client settings for speech bubbles.
### 7.9.0
- Fixed modded fish NPCs, like the ones of Tide 2, spinning around instead of swimming upright.
- Fixed "Navigation: Automatic" using ground movement for water NPCs and aquatic model NPCs.
- Fixed the "Random Swimming" objective never moving an NPC that uses aquatic navigation.
- Fixed a swimming NPC shaking or twitching in place instead of holding its tilt and swim depth.
- Fixed a swimming NPC turning in circles forever when it could not reach its next path point.
- Fixed an NPC that fell into water never getting out of it again.
- Fixed a following NPC searching a new path every tick while its target was unreachable.
- Fixed the "Move to" actions stopping short of a raised target or not starting while in the air.
- Fixed "Move back to Home" ignoring height differences and never returning from beyond 32 blocks.
- Fixed the "Opacity" input field being too narrow to show a value of 100.
- Fixed a damaged NPC with an Easy Model Entities model never flashing red.
- Changed modded water NPCs to swim level, vanilla water mobs keep their tilt as before.
- Changed the "Move to" actions to walk up to 48 blocks and to teleport only beyond that range.
- Changed "Move to" and "Move back to Home" to give up after three seconds without progress.
- Changed the timeout of a "Move to" action to count real ticks, it ran twice as long before.
- Changed a new "Random Swimming" objective to rank below following, fleeing and attack goals.
- Changed "Opacity" of an NPC with an Easy Model Entities model to be applied by that mod itself.
- Changed the minimum Easy Model Entities version to 2.3.0, older versions disable the integration.
- Added "Depth below surface" and "Height above floor" sliders for the swim level of an NPC.
- Added log entries for the NPC files written on a world save, with a warning above 250 ms each.
### 7.8.1
- Fixed #827 by rendering fish NPCs in water upright instead of always flopping on their side.
- Fixed #828 by keeping a damaged NPC from blocking the world save, it now falls back to defaults.
- Fixed a restored NPC picking up a random preset ID that changed with every save.
- Changed NPC data to only be written to disk when it actually changed.
### 7.8.0
- Fixed smaller text and UI issues.
- Changed an NPC that is already standing at its target position to finish the movement right away.
- Changed the "None" skin tab to "Advanced", which now holds "Disable Skin" and the texture field.
- Added a "Move to" action, which sends an NPC to a position, a player, its owner or its home.
- Added a "Move to and Wait" action, which runs the following actions only after the arrival.
- Added an arrival radius, a timeout and an optional teleport to both move actions.
- Added an "Opacity" attribute from 0 to 100, which fades body, armor and hand items together.
- Added a "Set Opacity" action, which turns an NPC into a ghost or hides it completely.
- Added the "Lantern Wraith" preset, a ghost walking a square with a short line at every corner.
- Added API access to the move actions and the opacity of an NPC.
- Added a "Resource Location" skin type, which renders any texture of a mod or a resource pack.
- Added an "Advanced" skin tab, which previews the NPC with the entered texture before applying it.
### 7.7.7
- Fixed #821 by keeping the transparency of 64x64 skins, which Fresh Moves needs for its eyes. Skins
- Fixed #818 by running trade actions for Villager and Wandering Trader NPCs as well.
- Fixed a dialog with several text variants switching its speech bubble size every second.
- Fixed the skin cache storing the processed image instead of the original download.
- Fixed the untranslated interval names, like
PER_DAY, of the "Execution Limit" condition. - Fixed the
sitanimation of Easy Model NPCs, which never used the built-in sitting pose. - Fixed the speech bubble being cut off by the head of an NPC when a player stood close to it.
- Changed speech bubbles to keep their screen size and to move down or aside when a player is close.
- Changed the speech bubble text to render 20% larger than a name tag.
- Changed a time based action set with a "Wait" action to run in order instead of picking one entry.
- Changed dialog texts to wrap later, so an existing dialog can switch to the wider screen layout.
- Changed fallback actions to skip screen actions without a player, like the regular actions do.
- Changed the minimum Easy Model Entities version to 2.1.0, older versions disable the integration.
- Added a "Wait" action, which pauses the following actions of an event for a chosen duration.
- Added the "Countdown Timekeeper" preset, a speech bubble count to ten ending in sound and sparks.
- Added scaling and rotation for Doppler NPCs behind the "Experimental Features" checkbox. Both only
- Added a "Sound" action, which plays a sound at the NPC with sound category, volume and pitch.
- Added "Every 5 Minutes" and "Every 15 Minutes" to the "Execution Limit" condition.
- Added a "Player Idle" condition, which checks how long a player has not moved.
- Added an "Immovable" attribute, which keeps an NPC in place against pushing and knockback.
- Added
/easy_npc pauseto pause a single NPC or all NPCs; the global pause ends with the server. - Added API access to the sound action, the pause state and the idle time of a player.
- Added a texture override per model slot for Easy Model NPCs over
/easy_npc render texture. - Added a "Repeat" playback mode with a count and a time limit to the "Play Animation" action.
- Added API access to animation variants, texture slots and textures of Easy Model NPCs.
### 7.6.0
- Fixed unclear mod conflict errors for duplicate entity data tracker IDs.
- Fixed third-party health bars rendering over NPC previews in configuration and dialog screens.
- Fixed Doppler and Easy Model Entities NPCs using default hitboxes instead of their model size.
- Fixed the
/easy_npccommands suggesting no NPC UUIDs at all on a server. - Fixed the pose list of the "Set Pose" action drawing over its input field.
- Fixed the untranslated "Loop", "After current" and "Action Data Type" labels of the action editor.
- Fixed the missing hint text of the "Chance" condition.
- Fixed long condition hints running out of the editor screen instead of wrapping.
- Fixed the misaligned help icons and text buttons of the "Message" action.
- Fixed changes to the "Set Pose", "Play Animation" and "Stop Animation" actions not being saveable.
- Fixed the speech bubble text sitting closer to its upper border than to its lower one.
- Changed the NPC suggestions to list the crosshair NPC first and only own NPCs without permissions.
- Changed a preset export to only store what differs from a new NPC, without position or owner.
- Changed a preset without objectives or actions to fall back to the defaults of its NPC type.
- Changed events without a player, like "On Spawn" or "On Kill", to check their conditions. An
- Changed a time based action to pick the owner as
@initiatorwhenever the owner is nearby. - Changed speech bubbles to stay visible from 5 up to 18 seconds, depending on the text length.
- Changed the "Set Pose" action to only show its input field for the "custom" pose entry.
- Added time based actions on five fixed steps, from every ~1 second up to every ~15 minutes.
- Added a "Message" action for chat, system message and speech bubble text without a command.
- Added text variants, a sender name, a recipient and translation keys to the "Message" action.
- Added the speech bubble graphic as
easy_npc:textures/gui/speech_bubble.pngfor resource packs. - Added a "Chance" condition in percent and a "Relationship" condition for owner and faction.
- Added spawn, owner login, state change, day / night, weather and the missing "On Trade" events.
- Added a base preset per NPC type under
easy_npc:api/preset/base/, usable as a parent preset. - Added the "Wandering Companion" preset, a talkative NPC built from time based messages.
- Added an action registry, an action handler, a preset validator and richer event data for mods.
- Added a tooltip with name, type and distance to every NPC suggestion of the
/easy_npccommands. - Improved the NPC suggestions, which appear without typing and tolerate a near miss of one block.
### 7.5.0
- Fixed #814 by giving every Cobblemon NPC its own animation state instead of one per species.
- Fixed #813 by letting "Move back to Home" work at any distance instead of only near its home.
- Fixed #812 by checking once per session whether a player changed their skin.
- Fixed #810 by accepting Cobblemon aspects of resource packs instead of only "shiny" and "female".
- Fixed NPCs losing their owner, home and "No Gravity" setting after a respawn or a preset import.
- Fixed objectives keeping a gone target and being switched off when their target or mod was gone.
- Fixed flying NPCs like Allay, Vex and Ghast moving on the ground instead of flying.
- Fixed dialog, button, preset, pose and texture names with duplicates or special characters.
- Fixed conditions not being editable on a dedicated server and untranslated condition texts.
- Fixed Easy Model Entities NPCs not turning their head and their model list ignoring a
/reload. - Fixed the "Legacy Easy NPC Data" warning appearing for newly created NPCs.
- Fixed missing transparency corrections for old 64x32 skins, which showed layer artifacts.
- Fixed the player skin screen freezing for a moment while a player name was looked up.
- Fixed the "Reset look at ..." objective label, which read "Reset loot at ..." in some languages.
- Fixed the Fabric game tests, which crashed on start because of the development helper mods.
- Fixed the NPC data isolation and trading persistence game tests, which never ran on Fabric.
- Fixed walking animation for Doppler NPC and 3rd party models.
- Changed the movement objectives to a fixed order: flee, follow, return home, then stroll. NPCs
- Changed datapack presets to
easy_npc/preset/, the old folder still works, but only for easy_npc. - Changed the required Easy Model Entities version to 1.7.0, floating models now hover by default.
- Removed the experimental user-defined NPCs and the unused
SERVER_SKINskin type. - Added NPC states with number, yes/no and text values, usable as condition, action and command.
- Added a "Navigation" and a "Hover height" setting to switch any NPC between ground and flying.
- Added parent presets, presets from other mods, a preset visibility and the "Forge Keeper" preset.
- Added custom conditions, events, an NPC identifier and more objective options for other mods.
- Added "On Far Distance" at 32 blocks and an option to spawn an NPC again when its owner logs in.
- Improved flying navigation and third party support with an API for presets and own objectives.
### 7.4.0
- Fixed #807 by no longer pulling every same-type NPC within 32 blocks into a "Defend Self" fight.
- Fixed #805 by evaluating all visibility settings together instead of stopping at the first one.
- Fixed #804 by keeping the custom name on Doppler NPCs for name based textures and the name tag.
- Fixed #803 by adjusting assets to match typical Minecraft style instead of generic UI style.
- Fixed the day and night detection, which counted sunrise as night and sunset as day.
- Fixed the visibility in the Nether and the End, which used the Overworld time.
- Fixed the time and game mode visibility checkboxes appearing in a random order.
- Fixed game tests only being able to fail on their first assertion, which hid later failures.
- Fixed the "Saddled" horse skin variants, which never showed a saddle.
- Changed "Visible to Owner" and "Visible to Team" to also follow day, night and game mode.
- Changed Evoker, Illusioner and Vindicator variants without "Crossed Arms" to keep their arms down.
- Added a "Defend Faction" objective that attacks whoever hurt a nearby faction member or player.
- Added a system message when faction members fight each other and the faction stays out of it.
- Added a head equipment slot for Illagers so their captain banner can be removed or swapped.
- Added a day and night preview to the display configuration screen.
- Added unit and game tests for the visibility attributes and the faction defense.
- Improved the visibility check performance by reading the display attributes only once per check.
- Improved display attributes from older versions by completing them with their defaults.
- Improved the attack objective screen by disabling "Protect Owner" and "Defend Faction" when unset.
### 7.3.0
- Improved skin variants by carrying their data as typed fields instead of parsing variant names.
- Centralized the Cobblemon mod id and default model on shared constants.
- Reduced duplicated enum code with a shared
EnumUtilshelper forget(String)lookups. - Optimized villager profession and type lookups to use direct registry keys instead of scans.
- Optimized enum name lookups by caching tag names, ids and keys once at construction.
- Added unit and game tests for skin variants, villager resolution and the enum helper.
### 7.2.0
- Fixed #801 by using combination for NPC, Dialog and Action UUIDs to avoid collisions for action
### 7.1.1
- Fixed #800 by lazy loading entity types.
- Fixed #799 by fixing edge cases and adding additional documentation and better log messages.
- Fixed #798 by considering console, commands and command blocks as trusted command sources.
- Fixed a critical single-player / LAN issue where client and server NPCs shared the same registry.
- Fixed a memory leak in the configuration menu handling and added timeout and disconnect cleanup.
- Fixed duplicate downloads when several NPCs request the same skin at the same time.
- Fixed skin lookups failing after a error so a slow server no longer freezes the game.
- Fixed the URL skin screen freezing the game while checking a remote image; the check now runs in
- Added a new World Spawner block that limits an NPC preset across the whole world (all dimensions),
- Hardened remote skin downloads with a strict size limit and safe redirect handling to prevent
blockPrivateAddresses setting.- Improved server performance by only sending entity and player load events to NPCs that actually
### 7.0.0
- Fixed #791 by adding Wandering Trader NPC type.
- Fixed #788 by extending the AI safeguards to Epic Fight and raw NPC variants (Piglin, Villager,
- Fixed #787, #531, #237 and #184 by adding a faction system with
/easy_npc factioncommands,
- Fixed #787, #771 and #572 by adding a new
targetobjectives tab to attack hostile factions or
- Fixed #786 by adding gender and shiny model variants for Cobblemon NPCs, searchable via
female
shiny in the model selection.- Fixed faction combat between invulnerable NPCs by adding the new
Attackable by Factionscombat
- Fixed Cobblemon model selection previews for oversized species by scaling with Cobblemon's own
- Fixed faction management edge cases by validating faction names, sorting faction lists and
- Fixed custom skin reloads by loading and clearing texture caches per skin model instead of always
- Improved the
Attackable by Players/Monsters/Factionscombat attributes to work independently of
Invulnerable, each opening a targeted hole for its own attacker group.- Improved preset command and network handling by splitting the large handlers into smaller focused
- Added Easy Model Entities Support.
- Added faction manager and faction editor screens to create, color and delete factions and manage
FACTION_MANAGEMENT security feature.- Added new
Miscattributes tab as home for the NPC faction assignment. - Added reusable warning and help icon components for inline hints with tooltips.
- Added additional unit and game tests for factions, target objectives and Cobblemon model variants.
### 6.25.0
- Fixed #782, #636, #622 by preserving data components during validations.
- Fixed #780 by caching remote texture downloads and reducing duplicate registrations.
- Fixed #767 by clamping attribute sliders against extreme values from other mods.
- Fixed #754 by adding custom data item matching for NPCs with actions and conditions.
- Fixed texture manager running in the wrong thread may cause crashes and deadlocks in >= 1.21.x.
- Fixed empty UUID handling for action conditions.
- Fixed execution limit reset for actions.
- Added texture registration queue to avoid multiple simultaneous downloads in the same tick.
- Added NPC coin, key and red token as consumable items for NPCs with actions and conditions.
- Added
Welcome Coin Traderas example NPC preset with custom coin, key and red token item data. - Added attribute safeguards against extreme values from other mods.
- Increased fallback max health value from 1024 to 4096 for high-health NPCs.
- Improved texture manager by reducing duplicate texture checks and registrations.
### 6.24.0
- Fixed #459, #775 by adding an option to block interactions with invisible NPCs.
- Fixed #774 startup crash related to optional Epic Fight and Cobblemon entity type maps.
- Fixed #773 by checking timed trade resets during base ticks and before opening trade screens.
- Fixed trade reset timing by increasing internal tickers correctly.
- Added time of day and weather conditions for #459.
- Added additional unit and game tests for trade resets, ticker handling and entity attributes.
- Added
Skywatch Scoutas example NPC preset with time of day and weather conditions.
### 6.23.0
- Fixed #772 by adjusting texture retries with 403 and 404 errors and lowering logging.
- Fixed #770 item rendering for Epic Fight NPCs (Evoker, Pillager, Vindicator and humanoid skins).
- Fixed #769 door loops with NPCs not reliably opening or closing doors.
- Fixed #760 by adding a dialog option and config setting (buttonConditionMode: LOCK or HIDE) to
- Fixed #709 by adding color picker popup for names with 32 colors and/or a manual RGB/hex value.
- Fixed NPC name color being reset when renaming without a specified color by preserving the
- Improved the door movement attributes so "Pass Door" is automatically enabled while "Open Door"
### 6.22.0
- Fixed #766 by passing the full server player context to command execution for better compatibility
- Fixed #764 by adding entity health, npc health conditions and NPC preset
Grukk, the Sparring Post as example for using these conditions.- Fixed #763 by making sure dialog button execution limits are now recorded.
- Fixed #758 by providing a example NPC preset named
One Wish Companion. - Fixed crashes related to 3rd party villager AI reading non-registered brain memories on Easy NPC
- Fixed Dialog buttons are not locked for server-side data as preparation for #760 and #644.
- Fixed #628 by adding conditional dialog opening support / command for better control over when
- Added brain AI for Piglin and Piglin Brute NPCs and registered the full vanilla brain memory set.
- Added additional guns to the gun tag for #757.
- Added a new "Open Dialog (Conditional)" action that opens a named dialog only if its conditions
- Added new entity health and npc health conditions for actions, dialogs and dialogs buttons.
- Added Piglin, Piglin Brute and Zombified Piglin NPCs invulnerable, for consistency with other
- Added a new "Knockback Immunity" combat attribute that prevents the NPC from being knocked back by
- Added a new "Explosion Immunity" combat attribute that makes the NPC immune to explosion damage
- Moved the "Projectile Collision" attribute to the Combat attribute screen, where it fits better
### 6.21.0
- Fixed item attachment for Illagers in crossed-arms pose.
- Fixed broken illager crossbow attack goal.
- Fixed crashes related to 3rd party items which are not renderable as hand items #756.
- Fixed crashes related to 3rd party mixins trying to access non-existing model parts #756.
- Fixed log.info spam message by reducing log verbosity and adding additional checks for custom
- Improved EasyNPCModelManager performance.
- Refactored NPC renderers to remove default hand item layer.
### 6.20.0
- Fixed crashes related to 3rd mods trying to access non-existing NPCs goals.
### 6.19.0
Note: This update adjusted the dialog background images by 10x6 pixels, which may require users to
adjust their custom dialog backgrounds if they are using custom ones.
- Fixed #752, #130 by adding dialog button condition support to allow to disable buttons.
- Fixed #683, #215 by adding typewriter effect support for dialog text.
- Fixed #690, #309 by allowing conditions for dialog, dialog buttons and interactions.
- Fixed smaller UI issues with dialog screen layout and background.
- Refactored dialog background images by 10x6 pixels on each side.
- Refactored dialog screen layout to better fit the new background size and improve appearance.
- Added typewriter effect and client configuration for dialog text.
- Added condition symbols to indicate the condition status for dialog, buttons and interactions.
- Added amount field for item conditions to allow checking for specific amounts of items.
- Added
Threshold Wardenas example NPC preset with various conditions and actions. - Added smaller bug fixes and optimizations related to dialog conditions and button states.
### 6.18.0
Note: This update changes the internal data format for conditions and actions, which may reset /
remove legacy existing execution-limit entries without stored IDs.
- Fixed #745 by adding conditions for actions to allow more complex and dynamic behavior.
- Fixed #652 by adding dialog button tooltip for longer texts.
- Fixed #687 by adding command value tooltip to show the full value.
- Added Experience Level conditions.
- Added Game-mode conditions.
- Added has item in inventory condition.
- Added has item in hand condition with (main hand and off-hand) support.
- Added player health condition.
- Added player tag condition.
- Added player team condition.
- Added Goldmere example NPC preset with various conditions and actions.
- Added negative condition support to allow negating conditions for more complex logic.
- Removed parameter pseudo IDs for
ActionDataEntryand replaced them with random UUIDs. - Refactored condition system to allow more condition types.
### 6.17.0
- Fixed #738 by adding additional tooltips for "Execute as player"
- Fixed to detailed logs by reducing log.info messages during startup and in-game.
- Added additional unit and game-tests.
### 6.16.0
- Fixed #732 by providing option to disable ESC key and close button for dialogs.
- Fixed #723 by avoid auto-close in specific cases like trading screens.
- Added general dialog configuration options to allow users to customize dialog behavior.
- Added avatar scaling and position offset options for dialogs.
- Added missing translation keys.
### 6.15.0 (Trades, Player Heads, Epic Fight and QOL updates)
- Fixed #731 by resyncing species data, if species list is empty on the client.
- Fixed #730 by improving Epic Fight integration and enabled experimental features.
- Fixed #729 by making sure trade uses are stored correctly.
- Fixed #728 by adding custom head support for player heads.
- Fixed #689 by showing remaining trade uses and allow resetting manually and automatically.
- Fixed #218 and #132 with new trade configuration screen and better support for custom trades.
- Fixed trade specific edge by switching between basic and normal/advanced trading mode.
- Fixed dialog button text is truncated with tooltip showing the full text.
- Fixed Cobblemon animation issues by syncing animation state with Cobblemon Animation System.
- Added per trade specific actions to allow users triggering actions after buys.
- Added trade reset button to reset all trades easily.
- Added trade usage information to trade configuration screen.
- Added experimental feature state to allow users to manually enable experimental features.
- Added Griselda Grindstone as example trader with actions.
- Cleanup test files.
### 6.14.0
- Fixed #727 by making sure changes are synced to the client when changing values.
- Fixed #726 by adding additional allow lists for specific commands.
- Fixed #686, #389, #304, #211 by adding basic Cobblemon support with Cobblemon NPC.
- Fixed dialog misalignment and navigation issues by adjusting dialog sprites and screens.
- Fixed x and z root rotation by correcting rotation logic and pivot calculations.
- Added basic Cobblemon support with custom NPC type and model for testing.
### 6.13.0 (Security and Permissions Updates)
Notes: This update includes better security checks and permissions for multiplayer environments. It
allows to execute server commands which can be potentially dangerous if used with malicious intent.
- The update splits the model root data and logic from the rest of the model part data and logic,
- Fixed #725 by separating model root data and logic from the rest of the model part data and logic.
- Fixed #722 by supporting .sbnt files as local presets.
- Fixed #675 by adding dedicated assets for dialog and config screen backgrounds.
- Fixed #605, #532, #529 with new security checks and permissions system.
- Fixed #469, #311 by adding experimental api documentation and examples for custom model support.
- Fixed double rendering of config screen background by removing redundant background rendering.
- Fixed Ghast and Slime hitbox and name tag position issues by adjusting bounding box.
- ⚠️ Added security checks to prevent potential exploits and allow safe usage in multiplayer
- Replaced dynamic dialog screen background with a static one for better performance, customization
- Replaced dynamic config screen background with a static one for better performance.
- Refactored config-ui specific components and removed them from the core mod.
- Removed duplicated sprite sheets.
- Prepare permission system for possible Luck Perms integration in the future like #712.
- General code cleanup and optimizations related to config screen rendering and assets.
### 6.12.0
- Fixed #714 by adding additional checks for custom model part list based on vanilla models.
- Fixed #713 by reducing log verbosity with downgraded per-NPC INFO messages to DEBUG and
- Fixed #711 by reduced oversized startup/config log output.
- Fixed NBT validation guard to prevent unnecessary buffer allocations in production.
- Added model part name constants to EasyNPCModelManager for consistent usage across mixins.
- Improved RenderEntityTypeSupportConfig by enhancing filter logic and optimizing data structures
- Removed verbose debug logs that dump large data structures.
### 6.11.1
- Fixed #710 by improving backward-compatible parsing for recoverable trade data.
### 6.11.0
- Fixed #703 rendering issue with new custom layer system and hand renderings.
- Fixed #701 by adding additional safeguards and logging for invalid trading offers.
- Fixed smart animation not working properly with modified head position.
- Fixed head tracking by moving player detection back to server side-only.
- Fixed CustomLookAtPlayerGoal to better handle edge cases and reduce jitter.
- Fixed issue with Doppler NPCs keeping their hand inventory.
- Improved PoseManager logging message.
- Updated logo with a new design.
### 6.10.0
- Fixed #698 by adding try and catch for 3rd party entity creation.
- Fixed #695 by clearing model part rotations/positions when switching to a
DEFAULTvanilla pose. - Fixed #695 by applying lock rotation and pose animation only when the NPC is idle.
- Fixed #695 by correcting root rotation pivot to use actual bounding box height instead of 0.5f.
- Fixed multiple objective registration issues including inverted
isTargetedPlayercheck, wrong
targets.
- Fixed goal reference being retained after objective is unregistered.
- Removed auto-lock of ROOT rotation when loading poses; root lock is now user-controlled.
- Added lock rotation checkbox to the advanced and custom pose configuration screens.
- Added model-specific pose key filtering in
ConfigurationMenuHandlerfor the default pose screen. - Added unit tests for
CustomPosition,CustomRotation,CustomScale,ModelPose,
ModelAnimationBehavior and ModelAnimationData.- Added
NPCDataIsolationTestHelperand game tests for Fabric and Forge. - Increased max head yaw range from 60° to 65°.
### 6.9.0
- Fixed #692, #666 by adding caching and safeguards to prevent redundant retriggering of NPC entity
- Fixed #651, #617 by adding basic custom poses for all supported NPC types.
- Fixed #597 by adding additional Flee goals for fleeing from players, villagers, monsters, ...
- Fixed pose loading to read directly from mod resources instead of copying files to disk.
- Fixed duplicate
saveNPCcalls on entity join by checking existing registry entry first. - Added
despawnandspawncommands to remove and re-spawn NPCs by UUID with configurable removal
- Added
ModelPoseAPIandEasyNPCEntityHandlerpublic API classes for controlling NPC poses and
- Added pose data files for all supported NPC types.
- Added lock rotation checkbox to the basic pose configuration screen.
- Added
MoveToPositionGoalto move an NPC to a position before executing a callback action. - Added
EasyNPCLookControlandEasyNPCBodyRotationControlto respect locked root rotation. - Added synced owner change and dimension change to the NPC entity data index.
- Added EasyNPCItemAttachmentLayer into various entity renderers.
- Added dedicated
Flee Objectiveconfiguration tab with objectives for fleeing creepers, monsters,
- Added
FOLLOW_ITEMobjective to the follow objectives tab to make NPCs follow item entities by
minecraft:apple).- Added
LookAtEntityByUUIDGoaland enabled the look-at-entity-by-UUID and look-at-owner objectives
- Added
persistentflag toSynchedDataIndexso that transient indices (e.g. crossbow charge,
- Added configurable
customParticlesEnabledflag toSlimeBasefor API consumers. - Added
SoundType.PETand mappedCAT_PURRto the cat NPC for tamed ambient sound variety. - Reduced log verbosity for periodic NPC save operations from INFO to DEBUG.
### 6.8.3
- Fixed #680 by enforcing version miss-match by upgrading network protocol version.
- Fixed #679 by resetting position, rotation and size for name tag.
- Fixed #665 by adding multi state slide for root rotations.
- Fixed #664 by adding option to disable following mouse cursor for easier posing.
- Fixed #663 by improve support for X and Z root rotations.
- Fixed #661 by adding quick rotation with NPC wand and sneaking to the NPC to rotate the root to
- Fixed move tool is wrongly triggering interactions by adding check for move tool in interaction
- Fixed Preset Item is wrongly triggering interactions by adding check for preset item in
- Fixed Slime and Ghast hitbox and name tag position issues by adjusting bounding box and eye height
- Fixed Slime and Ghast GUI position by adjusting offset values.
### 6.8.2
- Fixed #677 by extending
SafeMerchantDatawith notifyTrade to avoid crashes. - Added progression data support for leveling up NPCs based on player interactions and actions.
- Added global NPC tracking system for better management and debugging of NPCs across the world.
- Added
OriginalModelConfig.withVariantTexture()option to allow using variant textures with the
### 6.8.1
- Fixed #676 by using existing preset helper method instead of custom one.
### 6.8.0 (Adding API support)
- Fixed #667 by adding warning messages and additional checks for invalid network packets.
- Fixed Horse spawn eggs model.
- Fixed pose support for allay, chicken, creeper, fox, ghast, horse, illager, iron golem, slime and
- Added NPC base classes for better API support.
- Added NPC raw classes for advanced API support.
- Added Slim and Ghast NPC types.
- Added Custom Model API for easier integration with other mods and custom models.
- Refactored internal data handling and registration for better maintainability and future
### 6.7.1
- Fixed #657 and #656 by adding additional client side checks for vanilla bug.
### 6.7.0
- Fixed #650 by implementing Wolf Leg Animations in setupAnim method.
- Fixed #648 by fixing canBeHitByProjectiles translation.
- Fixed #645 by adding
allowBypassInvulnerabilityconfig option to allow/deny bypassing
- Fixed delete button showing label even with small width.
- Fixed up and down buttons not positioned correctly in some cases.
- Fixed name tag showing up for dialog and configuration UI.
- Fixed distance action issue were multiple actions are not properly triggered.
- Fixed issues with NPC presets.
- Fixed Cat NPC and Wolf NPC owner data not syncing properly.
- Added preset browser for easier selection of common NPC presets.
- Added preset .snbt (text) export and import functionality for sharing NPC presets.
- Refactored existing NPC presets to use new .snbt format.
- Refactored spawner system to use new preset format for better maintainability and future
### 6.6.2
- Fixed #643 by rework scaling system.
- Fixed scaling not properly updating hitbox and nametag position after restart / reload.
- Added MID and MOUSE_OVER name tag visibility modes for finer control over NPC name display.
- Added team-based name tag visibility support respecting vanilla Team.
### 6.6.1
- Fixed #638 by refactored internal data handling for display attributes.
### 6.6.0
- Fixed #634 by implementing asynchronous texture loading with dedicated thread pool.
- Fixed texture loading blocking render thread causing game freezes.
- Fixed race conditions in texture reload protection using atomic operations.
- Fixed resource leaks in HTTP connections during remote texture downloads.
- Fixed URL validation spam allowing multiple simultaneous downloads of the same texture.
- Fixed exception handling for remote image validation preventing crashes on invalid URLs.
- Fixed
defineId called for:warning messages during NPC loading. - Refactored texture loading architecture with multi-level defense and rate limiting.
- Refactored entity data registration logic for better maintainability.
- Converted data classes to modern Java records for better immutability and thread-safety.
- Added thread-safe session server spam protection with ConcurrentHashMap.
- Added comprehensive error recovery with automatic cooldown reset on failures.
- Improved texture loading with 2-thread pool and 500ms rate limiting.
- Improved exception handling with specific catch blocks for IIOException and FileNotFoundException.
### 6.5.2
- Fixed Villager profession and job skin issue.
- Improved GitHub workflows by adding cache for gradle dependencies.
- Improved Gradle build time and cleanup tasks.
### 6.5.1
- Fixed #632 by implementing ON_KILL action type and event.
- Fixed #629 by improving texture handling performance, caching, and memory usage.
- Fixed kill command is not working on NPCs.
- Fixed texture reload protection preventing cache reload after eviction.
- Fixed WebP validation bug in remote image validator (missing return statement).
- Refactored texture handling logic for better maintainability and future improvements.
- Added time-based reload protection (60 seconds) to replace permanent blocking mechanism.
- Added additional unit tests for texture handling.
- Improved gradle build tasks.
### 6.5.0
- ⚠️ Removed jar-in-jar bundle approach for better mod compatibility and api capabilities.
- Fixed #627 scissor implementation for better compatibility with other mods.
- Fixed #625 lively animation issues when using rotated or moved model parts.
- Fixed default animation are canceled when using scaled model parts.
- Added better pose animation control with smart, default und none options.
### 6.4.1
- Fixed #626 screen switching logic for different NPC UUIDs, thanks to
Spawnbladefor the detailed
### 6.4.0
- Fixed #626 by improving dialog data validation and error handling.
- Fixed #623 by refactoring render data and render handling.
- Fixed #622 by making sure custom data are properly saved and loaded.
- Fixed open dialog action type to allow opening dialogs from other NPCs.
- Fixed hashing issues by adding missing equals and hashCode methods for ConditionDataSet and
- Added custom data test item for #622 and easier testing of custom data.
- Improved records and fixed potential issues with missing data.
### 6.3.0
- Refactored config ui specific components and removed them from the core mod.
- Fixed dialog data by filtering dialog data before sending to the client.
- Fixed dialog editor layout issues and improved usability.
- Fixed missing default values for some dialog data fields.
- Added dialog priority support to control the order of dialog execution.
- Added condition support for dialog and scoreboard actions.
- Added frequency support for dialog to limit how often an dialog can be shown.
- Added new NPC preset to for scoreboard and condition support.
- Improved dialog button data format by removing redundant fields.
### 6.2.0
- Fixed string injection within dialogs.
- Fixed missing translation for action types.
- Added scoreboard action type to increase, decrease, set scoreboard values.
- Added
@score(...)NPC macro to display scoreboard values in the dialog. - Added additional unit tests.
- Improved spin button with indicators and better usability.
### 6.1.2
- Fixed container and menu sync issues with missing close container packets.
- Fixed close button not working in some cases.
- Fixed jumping mouse cursor between screen transitions.
- Fixed translation files and removed duplicate and deprecated entries.
- Moved Easy NPC wand to existing core item tab instead of creating a new one.
- Added cat pose support for different model parts (except tail).
- Improved EasyNPCWand glowing effect performance by disabling it when not needed.
- Improved custom entity detection by excluding non-living entities like displays, makers, throwns
- Improved cat variant handling.
### 6.1.1
- Fixed #612 by re-validating entity types.
- Fixed #610 by force sync of hat and head layers for specific models.
- Fixed orc textures.
- Improved custom model support and performance, by moving related logic into to client side only.
- Improved caching of player to UUID mappings for player skins.
- Limited change model commands and logic to Doppler NPCs only.
### 6.1.0 ✨
This is a major release. Please back up your worlds and NPC data before updating. This version
contains many improvements, optimizations, and internal changes that are **not fully compatible**
with earlier releases.
⚠️ Breaking changes
- Existing NPCs and their configuration data from versions before 6.1.0 may not load correctly or
- Internal data formats and some behaviors have been refactored to support new use-cases.
🧩 New modular structure
Easy NPC is now split into three separate mods:
- Easy NPC** – Bundle that includes both Core and Configuration UI for a plug‑and‑play experience.
- Easy NPC: Core** – Lightweight runtime and logic for NPCs, with minimal dependencies. Intended
- Easy NPC: Configuration UI** – Standalone configuration interface for creating and editing NPCs.
🎯 Why this change?
- Allows servers and modpacks to ship only the **Core** mod on the server side for a leaner setup.
- Reduces memory usage and load times when the UI is not required everywhere.
- Makes development and testing faster by separating UI and core logic.
[history]: https://github.com/MarkusBordihn/BOs-Easy-NPC/commits/
[upgrade_guide]: https://github.com/MarkusBordihn/BOs-Easy-NPC/wiki/Upgrading