Shopkeepers, quest givers, guards, companions for the road. Without Honor: NPCs is a toolkit for making
them: characters that look like players and talk, trade, fight and keep to a routine the way you set them up. Everything happens in the game: right-click an NPC with
Memorion's Feather, and the editor opens.
For Forge 1.20.1, NeoForge 1.21.1 and Fabric 1.21.1.
💬 Dialogues
A text editor that stays out of your way. Select a word to make it bold or give it a color, break a long
speech into pages, and try the dialogue in the game with one click.
A scene, not a chat box. The NPC stands next to its words as a live model, or you put your own 9:16
portrait in its place. Bring a second character into the conversation the same way, as a model or a picture.
A line can carry an image, a book, a map or its own music, and lore words explain themselves when the player
hovers over them.
Choices. Answers appear depending on reputation, items, past choices or the time of day.
Picking one can give a reward, take payment, open a shop, start a fight or send the NPC along with you.
A typewriter "monologue" bar (a dialogue action): a portrait and text that types itself out along the bottom of the screen.
Companions
Make any NPC a companion, and it joins the player on the road.
It keeps up. It follows you into any dimension, swims and dives after you, climbs ladders and doesn't get
stuck behind.
It rides with you. Give it a horse, a camel or another mount of its own, and it rides beside you. It can
also take a seat in your boat or row its own.
It fights at your side in its own style and looks after itself with potions.
You set the rules: what it does when you die, change worlds or log out, and whether it comes back after
it falls.
Combat
Give an NPC a fighting style, and it fights like one.
Fighting styles. A swordsman closes in, an archer keeps its distance, a shield bearer blocks, a potion
thrower lobs splash potions, and a mage with Iron's Spells casts from its own spell list and heals its allies.
Gear that counts. Damage and attack speed follow the weapon in hand, armor and enchantments work, and
accessories give their bonuses.
A potion belt. The NPC drinks to heal or buff itself, throws harmful potions at enemies and healing ones
at friends.
Who fights whom. You decide: put factions at war, and their NPCs fight each other. Make an NPC a villager,
and zombies hunt it while iron golems defend it.
Epic Fight mode: NPCs fight with Epic Fight animations and movesets.
A living world
Daily routine. Set where an NPC should be at each time of day and how it stands there: behind the counter
in the morning, by the fire in the evening, asleep at night. Mark it as global, and it keeps the routine even
when no one is around.
Poses and emotes. Pose every limb and save poses to a library. With Emotecraft, NPCs play animations.
Reactions. Write simple "When → If → Then" rules, and the NPC responds to what happens around it: greets
a player at the door, says good night at sunset, calls for help when hurt. Ready templates cover the common
cases.
Factions, reputation and trade
Reputation. Set up factions and their ranks, and a player's standing changes prices, which goods they see
and how NPCs treat them.
NPCs remember. Flags keep track of each player's choices, so you can build quests without a quest mod.
(FTB Quests support is on my mind too (ᵕ—ᴗ—))
Shops in the familiar villager window, with stock per player or for the whole server, restocks on a timer
and offers that open up with reputation.
Looks
Skins from the built-in set, by player name, by link or from a file, HD included.
Two sets of gear: what the NPC fights in and what it's seen in.
Disguise an NPC as any creature, modded ones included.
Tools
Memorion's Feather opens the editor of any NPC. The Relocation Staff moves NPCs, the Clone Book
saves an NPC and places copies, and the Auto-Spawner works like a vanilla spawner, but for your own NPCs - perfect for dungeons.
Trigger zones are invisible blocks that start a line, a cutscene or a redstone signal when a player walks in.
Export and share. NPCs and dialogues save to files, and the files open on both 1.20.1 and 1.21.1.
First steps
Place an NPC with the NPC Spawner and right-click it with Memorion's Feather.
Write a dialogue on the Dialogues tab.
Add it on the Entry Points tab. Now the NPC opens it when a player right-clicks.
Shops, following and everything else are actions on dialogue answers.
🧩 Compatibility
Every integration is optional. The mod works without any of them.
Epic Fight: Epic Fight animations and movesets for NPCs.
Forge 1.20.1: Minecraft 1.20.1, Forge 47.2.0 or newer.
NeoForge 1.21.1: NeoForge 21.1.219 or newer.
Fabric 1.21.1: Fabric Loader 0.19.5 or newer, Fabric API 0.116.17+1.21.1 or newer.
Install on both client and server. NPC rendering and the editor live on the client.
Languages: English, Russian, German, Spanish, French, Japanese, Korean, Polish, Brazilian Portuguese and
Simplified Chinese. Most translations were made without native speakers, so corrections are welcome.
Note. NPCs can use skins and music from links you provide. The mod downloads the file from that address
and nothing else: no data is collected or sent anywhere.
📖 Where the name comes from
For years, a few of us have played together on one private server, and over time it grew into something bigger:
a fantasy universe with its own history, factions and lore. We called that world Without Honor. Eventually
I wanted NPCs that truly belonged in it, characters I could shape, write and bring to life exactly the way
I imagined, and nothing out there did quite what I needed. So I built my own. This is that tool, cleaned up and
shared with you.
Tagging along is Alessia, the mod's mascot. She ships as a built-in NPC skin: a small piece of our world you
can drop into yours.

# Without Honor: NPCs, Update 1.0.0
> I get modern developers who keep adding feature after feature and pushing the release back. I could do that forever too, but I think it’s finally time. The main thing about 1.0.0 is that the mod now supports three versions: **Forge 1.20.1, NeoForge 1.21.1 and Fabric 1.21.1**. All future updates will come out on all of them at once. An enormous amount of tedious work went into this, so please put this version through its paces and share your impressions and any bugs you find. But besides a ton of unexciting technical stuff, there are some fun new features too.
>
> In the next version, I’ll go through your suggestions, polish up 1.0.0, and take a shot at the long-awaited TaCZ integration for 1.20.1.
## 🤫 Before you update
- Client and server must both run 1.0.0. 0.9.x clients can't join a 1.0.0 server.
- Back up your world and exports. Rolling back to 0.9.x isn't supported: dialogues, profiles and presets are now saved in a new format, and NPC reactions live under a new key.
## Minecraft 1.21.1: NeoForge and Fabric

- **Three builds of one version:** Forge 1.20.1, NeoForge 1.21.1 and Fabric 1.21.1. Features are the same; integrations differ. Fabric has no Iron's Spells, Epic Fight or Etched, since those mods have no Fabric versions for 1.21.1. Accessories on Fabric go through Trinkets instead of Curios. Sable ships are 1.21.1 only, ragdolls are NeoForge only.
- **Files travel both ways.** Dialogues with triggers, profiles and presets open in both 1.20.1 and 1.21.1. A file from a newer mod version gives a warning on import, not an error.
- **The server config on 1.21.1 is shared by all worlds**: config/wh_npcs-server.toml (on 1.20.1 each world has its own). A world moved from 1.20.1 keeps using its old serverconfig/wh_npcs-server.toml. Delete that file to switch to the shared one. On Fabric, config edits apply after you restart the world.
## Reactions: "When → If → Then" rules

I replaced the four old reaction lists (hurt, death, right-click, approach) with rules. A rule has three parts: **WHEN** is an event with filters, **IF** is a set of conditions, **THEN** is a chain of steps with branches. On top of that come "To" (who receives the steps) and "Frequency". The editor opens with the "Reactions →" button on the "Behavior" tab.
- **33 events**. About the NPC itself: hurt, died, crossed a health threshold, got a kill, saved by a totem, fight started and fight over, following, riding, schedule point, dialogue, trade, timer, changed dimension. About nearby players: came near and walked off, right-clicked the NPC, killed a mob, died, picked up, dropped, used an item, crafted, mined a block, stats (jumps, sleep, fishing, chests and about twenty other game counters), joined, respawned. About the world: a creature died, an NPC fell, entered a biome, weather changed, time of day (including your own HH:MM), the NPC spotted a creature.
- **Event filters**: radius, "Which player" (any, the leader, not the leader), "In sight only", creatures and biomes by id and by group (monsters, undead, bosses, ocean, Nether and more). "More ▸" holds "Every Nth time" and "Within, s".
- **Conditions**: all dialogue conditions plus 8 new ones: "NPC state", "Event creature", "Distance", "Biome", "Dimension", "Light level", "Players nearby", "Player pose". The new ones, except "Event creature", also work in dialogues and triggers.
- **Steps**: all dialogue actions plus new ones: "Run away", "Look at", "Apply effect to NPC", "Play sound at NPC", "Knock down" (with ragdolls). There is logic as well: "If…" with "yes" and "no" branches, "Pick at random" (up to 8 options with weights), "Stop here". "Run command" can run without a player, as the NPC with permission level 2.
- **Placeholders** in texts and commands: @player, @npc and event roles: @subject (the attacker, the victim, the creature spotted), @item, @place, @amount, @count. Commands get ids instead of names.
- **"To"**: the triggering player (default), the nearest, the leader, everyone near (up to 8, each separately) or no one. With no player around, a rule stays quiet unless "OK without player" is checked. "Frequency": a cooldown in seconds, a limit per game day, per life or in total, a chance, and a count that is shared or kept per player. While the NPC has a dialogue open, new rules stay quiet unless "Also during dialogue" is checked.
- **The editor lays out the chain by itself:** "+" between steps, a right-click menu, copying rules and steps between NPCs, Ctrl+C/V/D, undo up to 30 edits. Limits: 64 rules, 32 steps per rule, 16 conditions per list.
- **Templates** (12 of them: greets players, says goodbye, fears a creature, praises kills, calls for help and more) ask for the key setting right after you insert them. "Check" finds mistakes and takes you to the node. "Test ▾" runs a rule right now: "Dry run" only lists the steps, "For real" performs them. "Log" shows what is going on with the NPC's rules: fired, waiting for its cooldown, chance failed, a condition was false.
- **Old reactions are read automatically and shown as ordinary rules.** They still fire while a dialogue is open, as before. The old "Reactions" screen is gone; the death emote moved to "Death scene →" in the reaction editor.
- **Server load.** In a world with no rules, reactions add a single check. Sensors (players nearby, creatures, biome, weather) run only on NPCs that have such rules. An NPC gets at most 8 events per second. The server config has four new settings: reactionsEnabled, reactionScanBudget, reactionsMaxPerTick, reactionCommands.
## Water, ladders and an NPC's own boat

- **On the surface.** Currents push an NPC gently instead of carrying it off. In water an NPC swims at player speed, floats chin-deep and turns smoothly. An NPC swimming after a player no longer keeps turning back.
- **The "Swimming →"** screen on the "Behavior" tab gathers everything about water. "Board player's boat" moved there too.
- **"Dive after the leader" (on)**: when the leader goes under, the NPC dives after them and swims lying flat, like a player. In the top block of water it swims upright. "Walk on the bottom" (on): when the leader walks along the bottom, the NPC walks beside them and swims over obstacles.
- **"Uses up air" (off, experimental):** the NPC uses up air, surfaces to breathe, can drown and drinks Water Breathing from its belt on its own. Where there is nowhere to surface, a teleport to air saves it. "Stays under in combat" (off): while there is an enemy, the NPC fights underwater and risks drowning.
- **Ladders.** NPCs climb ladders and vines on their own: up and down, onto a ledge, in from above and from the side, through a trapdoor. Following, the path to a schedule point and chasing use ladders when there's no other way. The "Ladders" button: "When needed" (default), "By accident" (climbs only when it bumps into one, like before) and "Never".
- **Own boat ("Summon its own boat", off)**. The player is in a boat, and the NPC can't get in with them: no room, a chest boat, or the NPC is too far. Then the NPC summons its own boat and follows, keeping its place behind; it gives way and lands next to the player on shore. Once there's room in the player's boat, it switches over. You can pick any vanilla or modded boat in the pack; unusual ones (Boatload's furnace and large boats, Small Ships and the like) don't qualify. Nobody can get into the NPC's boat; it can't be damaged and disappears like a pet. Log out in a boat and back in, and the NPC is back in its boat.
- **"Wait here" on water**. With its own boat, the NPC waits in it at anchor, and the current doesn't carry it off.
- **For pack makers:** the item tag wh_npcs:own_boats adds a boat that its mod doesn't put in #minecraft:boats, and wh_npcs:own_boats_excluded removes a boat from the choice.
## Hunger and food

A new screen: "Behavior" → "Hunger & Food →". Everything is off by default.
- **""Feels hunger"**: its own food bar from 0 to 20 with saturation, like a player's. An empty bar has no penalty. "Drains in" ranges from 1 to 240 minutes (20 by default), three times faster in combat, while running and in water. "Eats when food level is below" defaults to 12 of 20.
- **Food:** up to 6 kinds in slots, and it never runs out. Food effects roll with the same chances as for a player (golden apple, rotten flesh). Only effects listed in the food's properties apply, so a chorus fruit doesn't teleport the NPC, and effects the item applies itself (suspicious stew, modded wine) don't reach the NPC.
- **"Heals slowly when well fed"**: at food level 18 or higher, a hurt NPC regains 1 health every 4 s.
- **How it eats:** food in hand, crumbs, sound. It doesn't eat in combat or for 15 s after, while fleeing, while talking or trading, in water, on a ladder or asleep. When following the leader, it eats during stops, and on the move only when very hungry. A sip of a potion interrupts eating.
- **An NPC in a custom pose** (the "Pose" tab or a schedule point's pose) doesn't eat. With Emotecraft, it also doesn't eat while it has an idle or schedule point emote. The screen warns about that.
- **For pack makers:** NPCs never eat food from the item tag wh_npcs:npc_food_excluded, and it doesn't show up in the picker. The tag ships empty; a datapack can add any food to it.
## Potion Belt
- **The healing threshold and the pause between healing potions are now set separately for combat and out of combat**: 40% and 5 s, 80% and 15 s. Only healing has a pause.
- **"Drink like a player" (off)**: the NPC drinks for 1.6 s with sips and the potion in hand, walks slower and doesn't attack. Off means it drinks instantly, as before.
## Odds and ends

- **Shift+RMB on a companion NPC toggles "wait / follow me again"**. The red "stay here" button in the dialogue window is gone.
- **"Crouch with the player" (off)**: when the leader sneaks, the NPC crouches too. Sculk sensors don't hear it, and mobs notice it from closer.
- **Companions leave the End together with the player**: after the credits they appear next to them.
- **After going through a portal**, an NPC can enter a portal again after 5 s (it used to be 15 s).
- **Schedule points remember their dimension.** An NPC in another dimension skips such a point instead of walking to the same coordinates there. The list shows a colored dimension icon next to each point.
- **The trade window closes by itself if the NPC dies, disappears or changes dimension, and if the buyer moves more than 8 blocks away. Payment goes back to the inventory. While the window is open, the NPC stands still and looks at the buyer.
- **Trade counters reset** only when the list of deals has actually changed.
- **Clone Book:** right-click an NPC with the book to save it to the book as a preset (operators only).
- **List of NPCs in the world.** Clicking the NPC icon next to a dialogue or the counter next to a faction opens a list of all such NPCs, unloaded ones included, with search and sorting. "TP" takes you to the NPC, "✎" opens its editor. Every way of teleporting to an NPC (/whc tp, "Global NPCs") lands you in the same spot: in front of the NPC, facing it.
- **Sable ships (NeoForge and Fabric)**. An NPC stands and walks on deck, follows the player on a moving ship, and if it falls behind it teleports right onto the deck. "Wait here" on a ship holds the post and rides along with the ship. Memorion's Feather, the Relocation Staff and the NPC Spawner work on ship blocks.
- **Ragdolls (Sable: Ragdolls, NeoForge only)**. The ragdoll button on the "Behavior" tab shows up when the mod is installed. "Like mobs": the NPC goes ragdoll whenever ragdoll mods decide so (with Ragdoll Reactions, on a heavy hit) and gets up by itself. "Ragdoll on death": when the NPC dies, its body falls and it dies a couple of seconds later, in place of the death emote. The "Knock down" action and step drop the NPC on command when "Like mobs" is on. Everything is off by default.
## Dialogue groups
In the "Dialogues" tab of the NPC editor:
- **Groups with a name, a color and an icon**. The folder button creates a group and moves the selected dialogues into it. Groups start collapsed, and the collapsed state is remembered. Without groups, the list looks the same as before.
- **Multiple selection**: Shift for a range, Ctrl for one at a time, Ctrl+A for everything visible (Cmd on Mac).
- **Drag and drop:** drag dialogues into a group; reorder groups by dragging or with "Move up", "Move down", "Move to top", "Move to bottom".
- **Right-click menu on a row**, a group header and empty space: open, move to group, rename, add to favorites, pin, export, delete, color and icon, new dialogue in group.
- **Deleting several dialogues takes one confirmation that lists the NPCs whose entry points will break.** "Export to PC" handles up to 64 dialogues at once.
> Writing this, I realize the list is huge, and maybe two and a half people will actually read it. So let’s put it this way: some more stuff got added, and a lot of stuff got fixed. Enjoy the game :D

# Without Honor: NPCs, Update 1.0.0
> I get modern developers who keep adding feature after feature and pushing the release back. I could do that forever too, but I think it’s finally time. The main thing about 1.0.0 is that the mod now supports three versions: **Forge 1.20.1, NeoForge 1.21.1 and Fabric 1.21.1**. All future updates will come out on all of them at once. An enormous amount of tedious work went into this, so please put this version through its paces and share your impressions and any bugs you find. But besides a ton of unexciting technical stuff, there are some fun new features too.
>
> In the next version, I’ll go through your suggestions, polish up 1.0.0, and take a shot at the long-awaited TaCZ integration for 1.20.1.
## 🤫 Before you update
- Client and server must both run 1.0.0. 0.9.x clients can't join a 1.0.0 server.
- Back up your world and exports. Rolling back to 0.9.x isn't supported: dialogues, profiles and presets are now saved in a new format, and NPC reactions live under a new key.
## Minecraft 1.21.1: NeoForge and Fabric

- **Three builds of one version:** Forge 1.20.1, NeoForge 1.21.1 and Fabric 1.21.1. Features are the same; integrations differ. Fabric has no Iron's Spells, Epic Fight or Etched, since those mods have no Fabric versions for 1.21.1. Accessories on Fabric go through Trinkets instead of Curios. Sable ships are 1.21.1 only, ragdolls are NeoForge only.
- **Files travel both ways.** Dialogues with triggers, profiles and presets open in both 1.20.1 and 1.21.1. A file from a newer mod version gives a warning on import, not an error.
- **The server config on 1.21.1 is shared by all worlds**: config/wh_npcs-server.toml (on 1.20.1 each world has its own). A world moved from 1.20.1 keeps using its old serverconfig/wh_npcs-server.toml. Delete that file to switch to the shared one. On Fabric, config edits apply after you restart the world.
## Reactions: "When → If → Then" rules

I replaced the four old reaction lists (hurt, death, right-click, approach) with rules. A rule has three parts: **WHEN** is an event with filters, **IF** is a set of conditions, **THEN** is a chain of steps with branches. On top of that come "To" (who receives the steps) and "Frequency". The editor opens with the "Reactions →" button on the "Behavior" tab.
- **33 events**. About the NPC itself: hurt, died, crossed a health threshold, got a kill, saved by a totem, fight started and fight over, following, riding, schedule point, dialogue, trade, timer, changed dimension. About nearby players: came near and walked off, right-clicked the NPC, killed a mob, died, picked up, dropped, used an item, crafted, mined a block, stats (jumps, sleep, fishing, chests and about twenty other game counters), joined, respawned. About the world: a creature died, an NPC fell, entered a biome, weather changed, time of day (including your own HH:MM), the NPC spotted a creature.
- **Event filters**: radius, "Which player" (any, the leader, not the leader), "In sight only", creatures and biomes by id and by group (monsters, undead, bosses, ocean, Nether and more). "More ▸" holds "Every Nth time" and "Within, s".
- **Conditions**: all dialogue conditions plus 8 new ones: "NPC state", "Event creature", "Distance", "Biome", "Dimension", "Light level", "Players nearby", "Player pose". The new ones, except "Event creature", also work in dialogues and triggers.
- **Steps**: all dialogue actions plus new ones: "Run away", "Look at", "Apply effect to NPC", "Play sound at NPC", "Knock down" (with ragdolls). There is logic as well: "If…" with "yes" and "no" branches, "Pick at random" (up to 8 options with weights), "Stop here". "Run command" can run without a player, as the NPC with permission level 2.
- **Placeholders** in texts and commands: @player, @npc and event roles: @subject (the attacker, the victim, the creature spotted), @item, @place, @amount, @count. Commands get ids instead of names.
- **"To"**: the triggering player (default), the nearest, the leader, everyone near (up to 8, each separately) or no one. With no player around, a rule stays quiet unless "OK without player" is checked. "Frequency": a cooldown in seconds, a limit per game day, per life or in total, a chance, and a count that is shared or kept per player. While the NPC has a dialogue open, new rules stay quiet unless "Also during dialogue" is checked.
- **The editor lays out the chain by itself:** "+" between steps, a right-click menu, copying rules and steps between NPCs, Ctrl+C/V/D, undo up to 30 edits. Limits: 64 rules, 32 steps per rule, 16 conditions per list.
- **Templates** (12 of them: greets players, says goodbye, fears a creature, praises kills, calls for help and more) ask for the key setting right after you insert them. "Check" finds mistakes and takes you to the node. "Test ▾" runs a rule right now: "Dry run" only lists the steps, "For real" performs them. "Log" shows what is going on with the NPC's rules: fired, waiting for its cooldown, chance failed, a condition was false.
- **Old reactions are read automatically and shown as ordinary rules.** They still fire while a dialogue is open, as before. The old "Reactions" screen is gone; the death emote moved to "Death scene →" in the reaction editor.
- **Server load.** In a world with no rules, reactions add a single check. Sensors (players nearby, creatures, biome, weather) run only on NPCs that have such rules. An NPC gets at most 8 events per second. The server config has four new settings: reactionsEnabled, reactionScanBudget, reactionsMaxPerTick, reactionCommands.
## Water, ladders and an NPC's own boat

- **On the surface.** Currents push an NPC gently instead of carrying it off. In water an NPC swims at player speed, floats chin-deep and turns smoothly. An NPC swimming after a player no longer keeps turning back.
- **The "Swimming →"** screen on the "Behavior" tab gathers everything about water. "Board player's boat" moved there too.
- **"Dive after the leader" (on)**: when the leader goes under, the NPC dives after them and swims lying flat, like a player. In the top block of water it swims upright. "Walk on the bottom" (on): when the leader walks along the bottom, the NPC walks beside them and swims over obstacles.
- **"Uses up air" (off, experimental):** the NPC uses up air, surfaces to breathe, can drown and drinks Water Breathing from its belt on its own. Where there is nowhere to surface, a teleport to air saves it. "Stays under in combat" (off): while there is an enemy, the NPC fights underwater and risks drowning.
- **Ladders.** NPCs climb ladders and vines on their own: up and down, onto a ledge, in from above and from the side, through a trapdoor. Following, the path to a schedule point and chasing use ladders when there's no other way. The "Ladders" button: "When needed" (default), "By accident" (climbs only when it bumps into one, like before) and "Never".
- **Own boat ("Summon its own boat", off)**. The player is in a boat, and the NPC can't get in with them: no room, a chest boat, or the NPC is too far. Then the NPC summons its own boat and follows, keeping its place behind; it gives way and lands next to the player on shore. Once there's room in the player's boat, it switches over. You can pick any vanilla or modded boat in the pack; unusual ones (Boatload's furnace and large boats, Small Ships and the like) don't qualify. Nobody can get into the NPC's boat; it can't be damaged and disappears like a pet. Log out in a boat and back in, and the NPC is back in its boat.
- **"Wait here" on water**. With its own boat, the NPC waits in it at anchor, and the current doesn't carry it off.
- **For pack makers:** the item tag wh_npcs:own_boats adds a boat that its mod doesn't put in #minecraft:boats, and wh_npcs:own_boats_excluded removes a boat from the choice.
## Hunger and food

A new screen: "Behavior" → "Hunger & Food →". Everything is off by default.
- **""Feels hunger"**: its own food bar from 0 to 20 with saturation, like a player's. An empty bar has no penalty. "Drains in" ranges from 1 to 240 minutes (20 by default), three times faster in combat, while running and in water. "Eats when food level is below" defaults to 12 of 20.
- **Food:** up to 6 kinds in slots, and it never runs out. Food effects roll with the same chances as for a player (golden apple, rotten flesh). Only effects listed in the food's properties apply, so a chorus fruit doesn't teleport the NPC, and effects the item applies itself (suspicious stew, modded wine) don't reach the NPC.
- **"Heals slowly when well fed"**: at food level 18 or higher, a hurt NPC regains 1 health every 4 s.
- **How it eats:** food in hand, crumbs, sound. It doesn't eat in combat or for 15 s after, while fleeing, while talking or trading, in water, on a ladder or asleep. When following the leader, it eats during stops, and on the move only when very hungry. A sip of a potion interrupts eating.
- **An NPC in a custom pose** (the "Pose" tab or a schedule point's pose) doesn't eat. With Emotecraft, it also doesn't eat while it has an idle or schedule point emote. The screen warns about that.
- **For pack makers:** NPCs never eat food from the item tag wh_npcs:npc_food_excluded, and it doesn't show up in the picker. The tag ships empty; a datapack can add any food to it.
## Potion Belt
- **The healing threshold and the pause between healing potions are now set separately for combat and out of combat**: 40% and 5 s, 80% and 15 s. Only healing has a pause.
- **"Drink like a player" (off)**: the NPC drinks for 1.6 s with sips and the potion in hand, walks slower and doesn't attack. Off means it drinks instantly, as before.
## Odds and ends

- **Shift+RMB on a companion NPC toggles "wait / follow me again"**. The red "stay here" button in the dialogue window is gone.
- **"Crouch with the player" (off)**: when the leader sneaks, the NPC crouches too. Sculk sensors don't hear it, and mobs notice it from closer.
- **Companions leave the End together with the player**: after the credits they appear next to them.
- **After going through a portal**, an NPC can enter a portal again after 5 s (it used to be 15 s).
- **Schedule points remember their dimension.** An NPC in another dimension skips such a point instead of walking to the same coordinates there. The list shows a colored dimension icon next to each point.
- **The trade window closes by itself if the NPC dies, disappears or changes dimension, and if the buyer moves more than 8 blocks away. Payment goes back to the inventory. While the window is open, the NPC stands still and looks at the buyer.
- **Trade counters reset** only when the list of deals has actually changed.
- **Clone Book:** right-click an NPC with the book to save it to the book as a preset (operators only).
- **List of NPCs in the world.** Clicking the NPC icon next to a dialogue or the counter next to a faction opens a list of all such NPCs, unloaded ones included, with search and sorting. "TP" takes you to the NPC, "✎" opens its editor. Every way of teleporting to an NPC (/whc tp, "Global NPCs") lands you in the same spot: in front of the NPC, facing it.
- **Sable ships (NeoForge and Fabric)**. An NPC stands and walks on deck, follows the player on a moving ship, and if it falls behind it teleports right onto the deck. "Wait here" on a ship holds the post and rides along with the ship. Memorion's Feather, the Relocation Staff and the NPC Spawner work on ship blocks.
- **Ragdolls (Sable: Ragdolls, NeoForge only)**. The ragdoll button on the "Behavior" tab shows up when the mod is installed. "Like mobs": the NPC goes ragdoll whenever ragdoll mods decide so (with Ragdoll Reactions, on a heavy hit) and gets up by itself. "Ragdoll on death": when the NPC dies, its body falls and it dies a couple of seconds later, in place of the death emote. The "Knock down" action and step drop the NPC on command when "Like mobs" is on. Everything is off by default.
## Dialogue groups
In the "Dialogues" tab of the NPC editor:
- **Groups with a name, a color and an icon**. The folder button creates a group and moves the selected dialogues into it. Groups start collapsed, and the collapsed state is remembered. Without groups, the list looks the same as before.
- **Multiple selection**: Shift for a range, Ctrl for one at a time, Ctrl+A for everything visible (Cmd on Mac).
- **Drag and drop:** drag dialogues into a group; reorder groups by dragging or with "Move up", "Move down", "Move to top", "Move to bottom".
- **Right-click menu on a row**, a group header and empty space: open, move to group, rename, add to favorites, pin, export, delete, color and icon, new dialogue in group.
- **Deleting several dialogues takes one confirmation that lists the NPCs whose entry points will break.** "Export to PC" handles up to 64 dialogues at once.
> Writing this, I realize the list is huge, and maybe two and a half people will actually read it. So let’s put it this way: some more stuff got added, and a lot of stuff got fixed. Enjoy the game :D

# Without Honor: NPCs, Update 1.0.0
> I get modern developers who keep adding feature after feature and pushing the release back. I could do that forever too, but I think it’s finally time. The main thing about 1.0.0 is that the mod now supports three versions: **Forge 1.20.1, NeoForge 1.21.1 and Fabric 1.21.1**. All future updates will come out on all of them at once. An enormous amount of tedious work went into this, so please put this version through its paces and share your impressions and any bugs you find. But besides a ton of unexciting technical stuff, there are some fun new features too.
>
> In the next version, I’ll go through your suggestions, polish up 1.0.0, and take a shot at the long-awaited TaCZ integration for 1.20.1.
## 🤫 Before you update
- Client and server must both run 1.0.0. 0.9.x clients can't join a 1.0.0 server.
- Back up your world and exports. Rolling back to 0.9.x isn't supported: dialogues, profiles and presets are now saved in a new format, and NPC reactions live under a new key.
## Minecraft 1.21.1: NeoForge and Fabric

- **Three builds of one version:** Forge 1.20.1, NeoForge 1.21.1 and Fabric 1.21.1. Features are the same; integrations differ. Fabric has no Iron's Spells, Epic Fight or Etched, since those mods have no Fabric versions for 1.21.1. Accessories on Fabric go through Trinkets instead of Curios. Sable ships are 1.21.1 only, ragdolls are NeoForge only.
- **Files travel both ways.** Dialogues with triggers, profiles and presets open in both 1.20.1 and 1.21.1. A file from a newer mod version gives a warning on import, not an error.
- **The server config on 1.21.1 is shared by all worlds**: config/wh_npcs-server.toml (on 1.20.1 each world has its own). A world moved from 1.20.1 keeps using its old serverconfig/wh_npcs-server.toml. Delete that file to switch to the shared one. On Fabric, config edits apply after you restart the world.
## Reactions: "When → If → Then" rules

I replaced the four old reaction lists (hurt, death, right-click, approach) with rules. A rule has three parts: **WHEN** is an event with filters, **IF** is a set of conditions, **THEN** is a chain of steps with branches. On top of that come "To" (who receives the steps) and "Frequency". The editor opens with the "Reactions →" button on the "Behavior" tab.
- **33 events**. About the NPC itself: hurt, died, crossed a health threshold, got a kill, saved by a totem, fight started and fight over, following, riding, schedule point, dialogue, trade, timer, changed dimension. About nearby players: came near and walked off, right-clicked the NPC, killed a mob, died, picked up, dropped, used an item, crafted, mined a block, stats (jumps, sleep, fishing, chests and about twenty other game counters), joined, respawned. About the world: a creature died, an NPC fell, entered a biome, weather changed, time of day (including your own HH:MM), the NPC spotted a creature.
- **Event filters**: radius, "Which player" (any, the leader, not the leader), "In sight only", creatures and biomes by id and by group (monsters, undead, bosses, ocean, Nether and more). "More ▸" holds "Every Nth time" and "Within, s".
- **Conditions**: all dialogue conditions plus 8 new ones: "NPC state", "Event creature", "Distance", "Biome", "Dimension", "Light level", "Players nearby", "Player pose". The new ones, except "Event creature", also work in dialogues and triggers.
- **Steps**: all dialogue actions plus new ones: "Run away", "Look at", "Apply effect to NPC", "Play sound at NPC", "Knock down" (with ragdolls). There is logic as well: "If…" with "yes" and "no" branches, "Pick at random" (up to 8 options with weights), "Stop here". "Run command" can run without a player, as the NPC with permission level 2.
- **Placeholders** in texts and commands: @player, @npc and event roles: @subject (the attacker, the victim, the creature spotted), @item, @place, @amount, @count. Commands get ids instead of names.
- **"To"**: the triggering player (default), the nearest, the leader, everyone near (up to 8, each separately) or no one. With no player around, a rule stays quiet unless "OK without player" is checked. "Frequency": a cooldown in seconds, a limit per game day, per life or in total, a chance, and a count that is shared or kept per player. While the NPC has a dialogue open, new rules stay quiet unless "Also during dialogue" is checked.
- **The editor lays out the chain by itself:** "+" between steps, a right-click menu, copying rules and steps between NPCs, Ctrl+C/V/D, undo up to 30 edits. Limits: 64 rules, 32 steps per rule, 16 conditions per list.
- **Templates** (12 of them: greets players, says goodbye, fears a creature, praises kills, calls for help and more) ask for the key setting right after you insert them. "Check" finds mistakes and takes you to the node. "Test ▾" runs a rule right now: "Dry run" only lists the steps, "For real" performs them. "Log" shows what is going on with the NPC's rules: fired, waiting for its cooldown, chance failed, a condition was false.
- **Old reactions are read automatically and shown as ordinary rules.** They still fire while a dialogue is open, as before. The old "Reactions" screen is gone; the death emote moved to "Death scene →" in the reaction editor.
- **Server load.** In a world with no rules, reactions add a single check. Sensors (players nearby, creatures, biome, weather) run only on NPCs that have such rules. An NPC gets at most 8 events per second. The server config has four new settings: reactionsEnabled, reactionScanBudget, reactionsMaxPerTick, reactionCommands.
## Water, ladders and an NPC's own boat

- **On the surface.** Currents push an NPC gently instead of carrying it off. In water an NPC swims at player speed, floats chin-deep and turns smoothly. An NPC swimming after a player no longer keeps turning back.
- **The "Swimming →"** screen on the "Behavior" tab gathers everything about water. "Board player's boat" moved there too.
- **"Dive after the leader" (on)**: when the leader goes under, the NPC dives after them and swims lying flat, like a player. In the top block of water it swims upright. "Walk on the bottom" (on): when the leader walks along the bottom, the NPC walks beside them and swims over obstacles.
- **"Uses up air" (off, experimental):** the NPC uses up air, surfaces to breathe, can drown and drinks Water Breathing from its belt on its own. Where there is nowhere to surface, a teleport to air saves it. "Stays under in combat" (off): while there is an enemy, the NPC fights underwater and risks drowning.
- **Ladders.** NPCs climb ladders and vines on their own: up and down, onto a ledge, in from above and from the side, through a trapdoor. Following, the path to a schedule point and chasing use ladders when there's no other way. The "Ladders" button: "When needed" (default), "By accident" (climbs only when it bumps into one, like before) and "Never".
- **Own boat ("Summon its own boat", off)**. The player is in a boat, and the NPC can't get in with them: no room, a chest boat, or the NPC is too far. Then the NPC summons its own boat and follows, keeping its place behind; it gives way and lands next to the player on shore. Once there's room in the player's boat, it switches over. You can pick any vanilla or modded boat in the pack; unusual ones (Boatload's furnace and large boats, Small Ships and the like) don't qualify. Nobody can get into the NPC's boat; it can't be damaged and disappears like a pet. Log out in a boat and back in, and the NPC is back in its boat.
- **"Wait here" on water**. With its own boat, the NPC waits in it at anchor, and the current doesn't carry it off.
- **For pack makers:** the item tag wh_npcs:own_boats adds a boat that its mod doesn't put in #minecraft:boats, and wh_npcs:own_boats_excluded removes a boat from the choice.
## Hunger and food

A new screen: "Behavior" → "Hunger & Food →". Everything is off by default.
- **""Feels hunger"**: its own food bar from 0 to 20 with saturation, like a player's. An empty bar has no penalty. "Drains in" ranges from 1 to 240 minutes (20 by default), three times faster in combat, while running and in water. "Eats when food level is below" defaults to 12 of 20.
- **Food:** up to 6 kinds in slots, and it never runs out. Food effects roll with the same chances as for a player (golden apple, rotten flesh). Only effects listed in the food's properties apply, so a chorus fruit doesn't teleport the NPC, and effects the item applies itself (suspicious stew, modded wine) don't reach the NPC.
- **"Heals slowly when well fed"**: at food level 18 or higher, a hurt NPC regains 1 health every 4 s.
- **How it eats:** food in hand, crumbs, sound. It doesn't eat in combat or for 15 s after, while fleeing, while talking or trading, in water, on a ladder or asleep. When following the leader, it eats during stops, and on the move only when very hungry. A sip of a potion interrupts eating.
- **An NPC in a custom pose** (the "Pose" tab or a schedule point's pose) doesn't eat. With Emotecraft, it also doesn't eat while it has an idle or schedule point emote. The screen warns about that.
- **For pack makers:** NPCs never eat food from the item tag wh_npcs:npc_food_excluded, and it doesn't show up in the picker. The tag ships empty; a datapack can add any food to it.
## Potion Belt
- **The healing threshold and the pause between healing potions are now set separately for combat and out of combat**: 40% and 5 s, 80% and 15 s. Only healing has a pause.
- **"Drink like a player" (off)**: the NPC drinks for 1.6 s with sips and the potion in hand, walks slower and doesn't attack. Off means it drinks instantly, as before.
## Odds and ends

- **Shift+RMB on a companion NPC toggles "wait / follow me again"**. The red "stay here" button in the dialogue window is gone.
- **"Crouch with the player" (off)**: when the leader sneaks, the NPC crouches too. Sculk sensors don't hear it, and mobs notice it from closer.
- **Companions leave the End together with the player**: after the credits they appear next to them.
- **After going through a portal**, an NPC can enter a portal again after 5 s (it used to be 15 s).
- **Schedule points remember their dimension.** An NPC in another dimension skips such a point instead of walking to the same coordinates there. The list shows a colored dimension icon next to each point.
- **The trade window closes by itself if the NPC dies, disappears or changes dimension, and if the buyer moves more than 8 blocks away. Payment goes back to the inventory. While the window is open, the NPC stands still and looks at the buyer.
- **Trade counters reset** only when the list of deals has actually changed.
- **Clone Book:** right-click an NPC with the book to save it to the book as a preset (operators only).
- **List of NPCs in the world.** Clicking the NPC icon next to a dialogue or the counter next to a faction opens a list of all such NPCs, unloaded ones included, with search and sorting. "TP" takes you to the NPC, "✎" opens its editor. Every way of teleporting to an NPC (/whc tp, "Global NPCs") lands you in the same spot: in front of the NPC, facing it.
- **Sable ships (NeoForge and Fabric)**. An NPC stands and walks on deck, follows the player on a moving ship, and if it falls behind it teleports right onto the deck. "Wait here" on a ship holds the post and rides along with the ship. Memorion's Feather, the Relocation Staff and the NPC Spawner work on ship blocks.
- **Ragdolls (Sable: Ragdolls, NeoForge only)**. The ragdoll button on the "Behavior" tab shows up when the mod is installed. "Like mobs": the NPC goes ragdoll whenever ragdoll mods decide so (with Ragdoll Reactions, on a heavy hit) and gets up by itself. "Ragdoll on death": when the NPC dies, its body falls and it dies a couple of seconds later, in place of the death emote. The "Knock down" action and step drop the NPC on command when "Like mobs" is on. Everything is off by default.
## Dialogue groups
In the "Dialogues" tab of the NPC editor:
- **Groups with a name, a color and an icon**. The folder button creates a group and moves the selected dialogues into it. Groups start collapsed, and the collapsed state is remembered. Without groups, the list looks the same as before.
- **Multiple selection**: Shift for a range, Ctrl for one at a time, Ctrl+A for everything visible (Cmd on Mac).
- **Drag and drop:** drag dialogues into a group; reorder groups by dragging or with "Move up", "Move down", "Move to top", "Move to bottom".
- **Right-click menu on a row**, a group header and empty space: open, move to group, rename, add to favorites, pin, export, delete, color and icon, new dialogue in group.
- **Deleting several dialogues takes one confirmation that lists the NPCs whose entry points will break.** "Export to PC" handles up to 64 dialogues at once.
> Writing this, I realize the list is huge, and maybe two and a half people will actually read it. So let’s put it this way: some more stuff got added, and a lot of stuff got fixed. Enjoy the game :D

# Without Honor: NPCs, Update 0.9.9
To put it briefly, this update made everything a little bit better and more convenient. Going forward, expect more compatibility with popular mods and - maybe - a 1.21.1 version? We'll see. Also, thank you for over 3,000 downloads across the platforms and for all the feedback you leave in the comments <3
## Dialogues
- **Node attachments.** The "Photo" button is now **Attachments**: besides images, a node can carry a **book** and a **map**. Pick them straight from your inventory (offhand included) - only written/writable books and filled maps are accepted. In the dialogue they show up as small chips under the NPC's text. A "take back" slot gives you a copy of the book or map if you ever lose the original.
- **Choice icons.** Every player reply can have a small 8×8 icon: agree, refuse, question, exclaim, anger, heart, smile, sad, trade, fight, leave, gift, wait, home, star, secret. Pick it in the reply editor.
- **Reply editor.** Reply text is now a button that opens a proper editor with the formatting toolbar. In-game replies wrap to two lines with "…" and a full-text tooltip; the editor warns live when a reply won't fit.
- **Text animation.** A new "Aa▸" button next to Glossary turns on typewriter-style text for a node with adjustable speed (chars/sec). Click, Space or Enter reveals everything at once. New nodes inherit the setting from the node you're on.
- **"Test" is now "In game".** Instead of a fake local preview, the real dialogue opens with the NPC in a dry-run: conditions count as met (breakable buttons still break), no actions run, nothing is written to your progress, and a yellow TEST banner is shown. The dialogue is saved automatically before opening.
- **Validation** got seven new rules: goto to a missing dialogue, inverted "breakable", images without a file, music that needs a mod/Etched, replies longer than two lines, monologue pages that won't fit, broken or oversized books. Results now wrap and scroll.
- **Monologue.** `@NPC` works for both name and portrait (`{npc}` still understood), tooltips for Name/Portrait, formatting toolbar for page text, an overflow warning with a **Split** button, automatic pagination in-game, page reordering and a numbered page list.
## World
- **Redstone triggers.** Trigger blocks can fire from a redstone signal and can emit a signal of their own for a set number of ticks. Without a player in range only player-independent actions run (say, emote, wait). Should've added it right away, but I only got around to it now, heh.
- **Spawner editor** got tidied up.
## Pets
- Edit **health, speed and jump** within vanilla ranges (pencil next to "Stats"), reset to species defaults, put **horse armor** on a horse and a **saddle** on any rideable pet - all visible in the preview.
- The **Pets** button now lives in the Behavior tab.
And a few other small things.

# Without Honor: NPCs, Update 0.9.8
A patch about things that had been getting in the way for a while: pauses in actions that didn't pause, dialogues that wouldn't save because of their size, and presets that arrived on someone else's server without their images. Plus a big pass on animation - with [bendy-lib](https://modrinth.com/mod/bendy-lib) installed NPCs finally bend their knees and elbows in [Emotecraft](https://modrinth.com/plugin/emotecraft) animations, and [ETF](https://modrinth.com/mod/entitytexturefeatures)/[EMF](https://modrinth.com/mod/entity-model-features) support means resource packs like [ Just Expressions](https://modrinth.com/resourcepack/just-expressions) and [ Fresh Animations: Player Extension](https://modrinth.com/resourcepack/fa-player-extension) now work on them.
> **Important:** the network protocol version was bumped again. Client and server must run the same mod version.
## Pauses and queues
- **Pause works in triggers.** A trigger block used to run the whole chain in one go: the pause was skipped and every command fired at once. It now waits honestly - including when the NPC isn't linked to the trigger or isn't loaded.
- **Pause in the on-death reaction** plays out to the end. The tail of the action list used to die with the NPC.
- **Monologues queue up.** Two in a row no longer overwrite each other: the first finishes, the second continues. And a monologue that locks controls no longer knocks you out of an open chest - it waits until you close the window.
- **Speech bubbles queue too.** Each one lives out its full duration and the next waits its turn. Nothing gets cut off mid-sentence.
## Large dialogues, profiles and media transfer
- **The size limit is gone.** Dialogues and profiles of any size save and transfer: data travels in parts and is compressed on the way, with a progress readout for longer uploads. A dialogue of forty thousand characters used to simply vanish along with your edits.
- **Images and skins travel with the preset.** Export puts them in a folder next to the file, and import only sends the server what it's missing. The file used to carry names alone, so on a new server the preset opened empty.
- **Name clashes resolve themselves:** if a file with that name already exists but holds something else, yours arrives under a free name and the links inside the preset are corrected automatically. Other people's files are never overwritten.
## Settings for server owners
There's now a separate server config: the maximum size of a single upload (32 MB by default, up to 256), the size cap for one image, and the total number of images in a world. The client sees your server's real settings and warns you up front instead of failing halfway.
## Skins
- **HD support:** 128×128, 256×256 and 512×512.
- **The built-in vanilla skins** (Steve, Alex, Ari and the rest) now come from the game's own resources. That means resource packs can see them: if a pack redraws the player skins, your NPC picks that version up. They also appear instantly and work offline.
## Respawn where they were created
The new default respawn place is **where the NPC was placed**, not where it died. The spot is remembered per character, survives moves and deaths, and never ends up in an export file.
> **About existing worlds:** NPCs whose respawn place was never set by hand will switch to their creation point - for ones already placed, that's wherever they stand now. If you want the old behaviour for someone, pick "Where it died" in their respawn settings.
## Animation and resource packs
- **Bends in emotes.** With bendy-lib installed, NPCs bend their knees, elbows and torso in Emotecraft animations, exactly like the player next to them. Limbs used to stay straight no matter how expressive the gesture was.
- **Resource pack compatibility.** With ETF and EMF installed, packs like Just Expressions and Fresh Animations: Player Extension now work on NPCs.
## Also fixed
- Fixed various bugs in the code that you probably never noticed - but they were there. New ones possibly added. This is the way!

# Without Honor: NPCs, Update 0.9.7
Companions got their own animals - mounts and a guardian wolf - weapons in an NPC's hands finally behave honestly, and a heap of bugs got fixed, plus a few fresh ones (that part's a joke... probably).
> **Important:** the network protocol version was bumped. Client and server must run the same mod version, otherwise the connection is refused - but nothing breaks silently anymore.
## 🐺 Pets
An NPC can summon an animal of its own and ride it while escorting you.
- **A mount** - horse, mule, donkey, camel or strider. It shows up when you get in the saddle yourself and leaves a couple of seconds after you dismount.
- **Its own horse, not a clone** - every summoned animal has its own coat and its own stats. You can take a snapshot of a real horse with the Memorion Feather and hand it over, or reroll the coat right in the editor.
- **Mounted combat** - archers and throwers work straight from the saddle. Everyone else dismounts, fights, and climbs back up.
- **A guardian wolf** - comes for the fight, fights beside its owner, and leaves when it's over. Toggled separately from the mount; pick its collar colour with the swatch in the editor.
- **Second seat on a camel** - the companion rides along with you if the seat is free. It won't elbow out a real player: it waits a second and a half in case someone wants to sit.
**🐣 More settings for pets are coming down the line.**
## Weapons now carry weight
- **Attack speed comes from the weapon.** Sword, axe, bare hands - each has its own rhythm, just like a player. An axe hits hard and slow, bare hands fast and weak.
- **Manual override** - set a number instead of the automatic value if you want a specific rhythm.
- **"From weapon" toggle** - turn it off and damage and speed come strictly from the profile, as before.
> **On balance:** this noticeably changes the combat rhythm of NPCs you have ALREADY placed. Unarmed ones will hit more often, axe fighters less often, swordsmen stay as they were. If that breaks the intent for a particular character, untick "from weapon" in its combat settings.
## Dialogues
- **"Go to dialogue"** - an action that moves the conversation into another dialogue.
- **"Break the button"** - a reply can be locked behind a lock that's knocked off by hitting it. The player holds LMB, cracks spread across the button, and the sound and debris depend on the material. Durability is configurable and the result can be remembered for good.
## Traits and looks
- **Fear auras** - the cat one scares creepers, the wolf one drives off skeletons, rabbits and foxes. They combine with any creature type.
- **"Doesn't burn"** - fire and lava neither ignite nor hurt.
- **"Uses portals"** - it will step into a portal on its own and travel with you to another world while escorting you. Companions used to be left behind at the portal - now they arrive next to you with a teleport effect.
- **The Combat tab was rebuilt** - everything fits without scrolling, buttons align to the grid, and "Creature type" moved in with the other submenus.
- **The clone book** shows presets under their own names (Cyrillic and CJK are finally visible) with the character's head in the row.
- **The damage cap** is raised to 2048.
## Fixed
- **The clone book and import "just stopped working".** A single preset with a URL skin was enough to silently kill the whole list - along with import and the second-character picker. Traced to the root and closed, and no network failure disappears without a trace anymore.
- **Equipment and accessories went missing.** Export to PC didn't put items in the file, import from PC didn't apply them, the export command overwrote them, and importing a preset without accessories wiped them off a live NPC. Every path now goes through one proven route.
- **Portraits and dialogue images** didn't load for ordinary players on a server - only operators saw them.
- **Dialogue music:** after muting, a loud snippet burst through on the way out. And the mute itself was lost if the next node started a different track.
- **A spawner NPC** came back after death as a nameless dummy with no skin and no combat AI.
- **One broken entry in a profile** (a drop, a schedule row, a trade) no longer takes the whole profile down with it.
- **A kick instead of a message:** a large trigger or a long glossary article threw you off the server with no explanation. Now you get an honest refusal in chat.
- **Renaming a dialogue** no longer breaks the jumps pointing at it from other dialogues.
- **Interface odds and ends:** the "Show name" checkbox in the second-character picker couldn't be clicked, the "Clear model" button ignored part of its own area, and the model in the skin library covered a button. Clicking the label next to a checkbox now toggles it.
- **The dialogue window** got lighter on weak machines: term and avatar markup is computed once instead of every frame.

# Without Honor: NPCs, Update 0.9.6
In 0.9.4-0.9.5 a bug crept into the provocation system that made combat NPCs noticeably dumber - found it, took it apart down to the last screw, and fixed it. No new features, fixes only.
## Combat AI back in shape
The root was a single bug: provocation "forgiveness" wrongly dropped any player target once a second - even one assigned via "Who to attack".
Forgiveness itself isn't gone - it works as intended: the NPC only lets go of someone who hit it themselves and hasn't touched it in a while. Assigned enemies don't get "forgiven".
## Also fixed
- An NPC with an active schedule could teleport to its schedule spot mid-fight. The schedule now politely waits for the fight to end.
- "Flee when hurt" on combat styles: the panicking NPC first aggroed from the very first hit and only then ran. It now honestly runs, and provocation stays intact.
- Natural hostility: a combat villager-NPC fled from undead instead of fighting, and feared a predator even with its hostility turned off. Prey now fears only real predators - and only while not in a fight itself. How's that for a line, huh?
- After a chunk reload the mage could assemble its spells without the book ones - the spellbook in the accessory slot is now always counted.
- Invulnerable decorative NPCs no longer gather a crowd of mobs endlessly punching thin air around them.
- A defender golem no longer gets a permanent target over an accidental poke at an NPC - it steps in only for a real offense.
- The preview on the Pose tab now shows the per-part pose and the idle emote if they're set. Rotation and position of the transform no longer push the model out of the frame - it stays centered.

# Without Honor: NPCs, Update 0.9.5
An update about how the world sees your NPCs. The headline: characters got a **Creature type** - now vanilla (and modded) mobs react to an NPC as if it really were a villager, undead or pillager. Plus magic learned to take care of itself, book spells became controllable, Curios stopped getting lost on death, a few traits finally came to life, and the mod itself now speaks eight new languages.
## Creature type: the world reacts to NPCs
Before, mobs simply ignored WH NPCs - a zombie would walk past a villager as if it weren't there. Now the Combat tab has a **Creature type** button, and inside it you pick what other mobs treat this character as:
- **Villager** - zombies, skeletons, illagers and other foes of villagers attack it, and iron golems defend it.
- **Undead** - iron and snow golems attack it.
- **Piglin** - wither skeletons come for it.
- **Pillager** - iron golems strike it.
- **Neutral** - as before, nobody bothers it until it starts trouble itself.
- **Custom** - tick who exactly attacks: monsters, wither skeletons, iron or snow golems.
Modded mobs are picked up on their own if they inherit vanilla behavior. And so that nothing extra is computed on servers with no types assigned, the whole thing only wakes up when an NPC with a type is actually loaded in the world.
## Natural hostility between NPCs
The type now also shapes relations between the NPCs themselves. Make one undead and another a villager - and the undead NPC will go and attack the villager, while the villager flees from it.
Who wins when settings disagree? The explicit always beats the default. The **Passive** combat style shuts hostility off entirely - a peaceful zombie NPC won't touch anyone, even though it still counts as undead. Factions and the "who to attack" list sit on top of the type. If you deliberately put undead and a villager in the same faction, they won't fight: the type doesn't override your decision. And you can turn natural hostility off completely with a checkbox right in Creature type.
## Golems stand up for their own
Just like vanilla: kill a villager in front of an iron golem, and it comes after the offender, be it a mob or a player. Villager NPCs were missing this - now it's here.
## Magic: the mage looks after itself
The **Healing** and **Buff** categories used to behave oddly - without the "Heal allies" checkbox the mage wouldn't cast them even on itself. Sorted out: healing and buffs on self now always work, and the checkbox merely extends them to its own - faction NPCs and the player it follows. And a buff no longer waits until the mage gets hurt: it applies its boosts at the start of a fight, as intended.
## Magic: book spells under control
A spellbook in the accessory slot still feeds the mage spells, but before they quietly dropped into attack with no distinction. Now book rows in Magic let you set a **category and weight** - you don't touch the spell itself (it comes from the book), but how it's used is up to you. The settings are tied to the spell, not to a specific book, so they survive swapping it. Book healing and buffs now also feed support instead of going to waste.
## Curios no longer lost on death
A nasty bug: items in an NPC's Curios slots dropped on death, and after respawn the character was left without them. This was already fixed for regular gear, but Curios went their own way. Now they behave the same - they don't fall to the ground on death, they come back with the NPC. Nothing to pick up again.
By the way, I tried the new ridged Lay's, the onion and cheese ones. Not bad, but a bit too tough for some reason. Worth grabbing once just to try. Anyway, moving on.
## Traits came to life
Three settings in Traits didn't actually work - fixed:
- **Flee when hurt** - panic was smothered by Provocation: it cleared the hit marker that fleeing reads. Now a panicking NPC really does run, and the escorted-player protection stays intact.
- **Fear the sun** - vanilla logic only sought shade while the mob was on fire. A WH NPC doesn't have to burn - now it hides from the sun by day simply because it fears the light.
- **Burn in sun** - it caught fire far too rarely: the check ran once a second while ignition is probabilistic, so an NPC took about half a minute on average to light up. Now the check runs every tick, like vanilla undead - it burns reliably.
## The mod now speaks eight more languages (beta)
Until now Without Honor: NPCs shipped with Russian and English only. Eight more languages join them:
- <img src="https://flagcdn.com/20x15/cn.png" width="20" height="15" alt="CN"> Simplified Chinese
- <img src="https://flagcdn.com/20x15/es.png" width="20" height="15" alt="ES"> Spanish
- <img src="https://flagcdn.com/20x15/br.png" width="20" height="15" alt="BR"> Brazilian Portuguese
- <img src="https://flagcdn.com/20x15/de.png" width="20" height="15" alt="DE"> German
- <img src="https://flagcdn.com/20x15/jp.png" width="20" height="15" alt="JP"> Japanese
- <img src="https://flagcdn.com/20x15/fr.png" width="20" height="15" alt="FR"> French
- <img src="https://flagcdn.com/20x15/pl.png" width="20" height="15" alt="PL"> Polish
- <img src="https://flagcdn.com/20x15/kr.png" width="20" height="15" alt="KR"> Korean
The whole interface is translated in full - tabs, buttons, tooltips, messages.
For now the translation is beta. Meaning and technical bits have been checked, but a native speaker feels a language's tone and flow best. If you play in your own language and spot an awkward phrase, a typo or a clipped line - drop a note on GitHub and I'll fix it. Such corrections are especially welcome for Chinese, Japanese and Korean.
## Also fixed
- On the Combat tab, Style and Creature type swapped places.
- Fixed the description of the enchantment type (the former Type button).
- A few more small things not worth your attention.

# Without Honor: NPCs, Update 0.9.4
A big update. The headline: NPCs can cast now - **[Iron's Spells 'n Spellbooks](https://modrinth.com/mod/irons-spells-n-spellbooks)** integration landed. Plus throwable spears from other mods, provocation, friendly fire, dialogue pauses and a theatrical death. Let's go in order.
## Do You Believe In Magic?
If Iron's Spells 'n Spellbooks is installed, combat gets a sixth preset - **Mage**. Pick it, open the Magic screen (button on the Combat tab) and build the NPC a spell loadout - the way a player fills a book, only without the book.
- A **spell picker** with all the icons and school colors, search and tabs "All / Original / Addons". Every spell from ISS and its addons is picked up automatically.
- Each spell has a **category**: attack, defense, movement, healing, buff. The mage decides what to throw by the situation - a fireball at the enemy, a teleport when in danger, a heal when an ally is hurt.
- **Power and interval** - the level spread of spells and the pause between casts.
- **"Spells from weapon"** - if the mage holds an imbued weapon, its spells join the pool automatically.
- **Spellbook from Curios** - drop a book into the slot and its spells feed straight into the attack pool, even without a hand-picked loadout. In the Magic screen they sit at the top of the list as purple rows marked "from book" - you can't edit them, pull the book out of the slot and they're gone.
- The mage fights **hybrid**: casts from range, draws a weapon up close.
## Magic: school attributes
A separate Attributes screen (from Magic) - fine-tuning of magic resistance and power. Three general stats (spell power, resistance, cast speed) and two bars per each of the nine schools: resistance and power. From -100% to +100%, zero being the same as any ordinary creature. Want a fire mage who shrugs off ice? Go ahead.
## Magic: supporting allies
A mage can be told to **Heal allies**. Then it heals and buffs not only itself but its own - other NPCs of its faction and the player it follows. Healing kicks in when an ally is hurt, buffs when they're fine, and the NPC won't re-cast a buff that's already on the target. Works with the Mage preset.
## Magic: casting in dialogue
A new dialogue action - **Cast spell**. The NPC casts a chosen spell once on cue: at the player (projectiles aim at them) or on itself (buffs, healing, summons). For scenes, not combat - works with any preset.
## Thrower: spears from other mods (thx pedantic_jennings68)
Only the vanilla trident could be thrown before. Now the Ranged preset understands modded spears too. The NPC throws **their** projectile with **their** damage and effects, and the weapon is neither consumed nor duped. If some mod misbehaves and the throw fails, the NPC quietly falls back to melee. The list can be extended with the datapack tag `wh_npcs:throwable_spears`.
## Provocation: no more aggro from a single poke
A setting in its own Provocation window (button on the Combat tab). Any stray hit used to make the player a target. Now the NPC tolerates it - and only turns hostile past a threshold: by hit count (3 by default) or by HP taken (15% within a window), whichever comes first. Don't hit it for a while and it forgives you, going back to its business. A separate checkbox: **hits from the escorted player don't aggro at all** - you can clip your companion in a fight with no consequences. A player in a hostile faction tier is exempt: they're an enemy already.
## Friendly fire
Two independent safeties:
- **By faction** - a "Members don't harm each other" checkbox in the faction editor (on by default). Arrows, spears and AoE spells no longer hit members of the same faction. A mage can cast into the crowd without mowing down its own.
- **By companion** - "Don't harm the escorted player" next to provocation: the NPC's projectiles and spells won't hit the player it follows. Fire through them all you like.
Direct damage; summons are out of scope for now.
## Wait action (thx thewiggleduck)
A new dialogue action - a **pause** before the following actions. It doesn't block: the dialogue advances right away, and the actions after Wait fire N seconds later. Works in reactions too. From 0.05 to 600 seconds.
## Emote before death (thx thewiggleduck)
In Reactions you can set an **Emotecraft emote the NPC plays as it dies**. On death it stands a hair from dying, plays the emote invulnerably (0.5 to 10 seconds) and only then drops. A looping emote is cut off by the timer. `/kill` kills instantly, no scene. The totem takes priority — if it saved the NPC, there's no scene. Needs Emotecraft.
## Shield pose
A shield NPC finally holds the shield like a person - the arm tucks it to the body like a player blocking, instead of sticking out sideways. And shield detection went the proper Forge way: modded shields work, not just the vanilla one.
## Also fixed
- **The follow "shuttle."** An escorting NPC fighter would finish off a mob - and on every swing turn back to the player, jittering back and forth. Now following yields in combat: the NPC calmly finishes the enemy and only then returns to you.
- Various interface improvements and code polishing.

# Without Honor: NPCs, Update 0.9.3
## Look: three degrees of interest
The **"React with gaze"** setting in Traits grew from a checkbox into three modes:
- **Off** - the NPC stands the way you placed him and doesn't turn his head.
- **Calm** - the old behavior: occasionally glances at passers-by, looks around.
- **Lively** - tracks you with his head while you move around, and if you walk behind his back he turns his body too. Stand still for a few seconds - he loses interest and goes back to his business; move again - he locks back on.
Lively mode has a **radius** (3 blocks by default, up to 16) - so the whole village doesn't stare at you while you walk down the street.
## Into the boat with the player
A companion that follows you (once or permanently) now hops into your boat when there's a free seat. Leave the boat and he leaves too. Can be turned off with the **"Board the player's boat"** checkbox in Traits.
## Say action: chat and cooldown
The **Say** action got two new options:
- **Duplicate to chat** - the text also goes to chat for nearby players, just like profile phrases can.
- **Cooldown** - the line fires at most once per N seconds. Counted per NPC (one cooldown for everyone) or per player (each gets their own).
## Emotes: proper replay
Previously an Emotecraft emote from a dialogue action played once - and that was it until you re-entered the chunk. Now the action has three modes: **every time**, **once** (as before) and **on cooldown**. Schedule emotes got a choice too: once, or repeat every N seconds - a small **"1x/Ns"** button next to the emote (RMB cycles the intervals).
## New condition: player level
Hide a dialogue line behind experience levels: *"from level 30"* - and the trader shows his special stock only to seasoned players. Min/max bounds; an empty one isn't checked.
## "Turn to me"
Placed an NPC and he froze mid-turn after looking around? The **Pose** tab got a **"Turn to me"** button - the NPC turns to face you, for all players. The schedule transform window has a matching **"Face me"** button that writes the direction into the rotation field.
## Mentions: @player and @nick with an avatar
- Dialogue and phrase texts support the **@player** and **@npc** aliases - they insert names just like `{player}` and `{npc}`, only faster to type.
- Mention a specific player - **"@Dunknight"** - and their tiny head shows up next to the name in the dialogue. A small thing, but immersion grows.
## NPC Lines got comfier
A long phrase no longer sticks out of the list - it's trimmed with "..." and the full text shows on hover. Every phrase got a **pencil icon** - edit in place, no more delete-and-retype.
## Also fixed
- The **"used by NPCs"** hint for dialogues and factions now counts only NPCs actually placed in the world.
- The dialogue portrait no longer inherits model rotations: turn an NPC 90 degrees - in the dialogue he still faces you.