promotional bannermobile promotional banner

Admin instruments: Custom NPCs —Improved by admins for admins

A patched build of Custom NPCs for Minecraft 1.16.5 (Forge). The same mod you know, with the bugs fixed, a rebuilt editor, a dark theme, a much stronger quest system
Back to Files

CustomNPCs-1.16.5-BRP-0.0.17.jar

File nameCustomNPCs-1.16.5-BRP-0.0.17.jar
Uploader
Rayman_GCRayman_GC
Uploaded
Sep 1, 2026
Downloads
5
Size
12.1 MB
Mod Loaders
Forge
File ID
8786242
Type
R
Release
Supported game versions
  • 1.16.5

Curse Maven Snippet

Forge

implementation fg.deobf("curse.maven:custom-npcs-brp-1677747:8786242")

Learn more about Curse Maven

What's new

39. The quest-chain scheme

A "Scheme" button in the quest manager opens the graph: nodes are quests (type, R for repeatable, END where the chain stops), edges are next-quest links, jumps back are GOTO. Roots are outlined in accent; nodes drag, the canvas pans, clicking a node opens the quest editor. The same engine as the dialog scheme.

40. Quests: the last fixed limits removed

Kill targets, manual counters and quest dialogs are unlimited lists; kill targets are picked from the entity registry with search (a typo used to make a quest that silently never completes — the name field stays editable for NPC and player names). The quest editor moved to the measured layout with sections: basics, hand-in, sub-editors and the per-quest switches.

41. Review pass, and branching chains

A verification pass over the quest work found and fixed four defects of my own: the quest editor layout overflowing its own panel, text buttons too narrow for their labels, long labels in the quarter-width row, and an OR branch drawn as GOTO in the scheme (an edge-flag bit collision). Then branching: a quest now carries a list of next-quest candidates, each gated by the same availability system dialogs use (AND/OR included). At turn-in the candidates are tried in order and the first the player passes starts; the old single next quest remains the unconditional fallback and is exactly what old data reads into. The editor manages the list (order = priority) and the scheme draws every branch with IF/OR labels.

42. Multiple commands, and the dialog editor restyled

One line = one command. The split lives in the single execution point every feature funnels through — dialog command, quest command, reply-option command, scenes, the scripting APIs — so all of them gained multiple commands with no data format change. The command editor became a real multiline area (with the section-34 editing habits), with the @p/@r/@a/@dp hints beneath it; the "command" reply option opens the same editor instead of a single-line field.

The dialog editor — the screen behind the tester's screenshots, where "Edit" buttons sat on top of their own labels — moved to the measured layout with sections; the edit-button width is measured from the longest translation.

43. The NPC map

A new screen: a top-down view of every loaded npc in the dimension. Each npc is a dot in its faction's colour at its world coordinates; the player is an accent cross. Dragging pans, the wheel zooms ×0.25–×8 around the cursor, names appear from ×1.5. Search highlights matches and centres the view on the first one. Hover shows name, faction, role, job, coordinates, dialog count and the quests the npc takes part in. Clicking an npc opens its editor through the same remote mechanism the wand's remote screen uses. A toggle draws the quest flow: an arrow from the npc whose dialog starts a quest to the npc it is handed in to — both ends resolved client-side from the already-synced registries, at zero extra traffic. The list itself arrives one npc per packet, like every list in this build; access takes the npc-gui permission and the wand in hand. Honest limit: the map sees only loaded npcs — the mod has no persistent registry of every npc in the world.

44. The map: registry, zones, terrain

A persistent npc registry (mapregistry.dat in the world folder): entities exist only while their chunk is loaded, so a map fed from live entities forgot the world's far side. The server now keeps a record per npc - name, position, dimension, role, faction, dialogs - refreshed on load and by a once-a-minute sweep, and the map shows everyone. An unloaded npc is a hollow dot; clicking it teleports the admin there (the chunk loads, the next click edits). Records self-heal: a loaded chunk without its npc drops the record, and deleting an npc removes it immediately.

Quest zones on the map: the location-quest zones draw as circles with the quest and location named at the centre - resolved from the client's synced quest registry at zero extra traffic, with their own toggle.

Terrain: the top block of every column in the loaded chunks is sampled into a 512×512 texture (a pixel per block), material colours with classic slope shading like a vanilla map. Built chunk-by-chunk (1024 chunk lookups instead of 262k) once per open and on refresh; the frame cost is a single UV-cropped blit. Beyond the loaded chunks the panel stays flat - the npcs there still show from the registry.

45. The map: terrain that stays

The live sampler only sees the chunks around the player, so the map went flat past the render distance. Every sample now lands in a persistent cache (customnpcs_map/<server>/<dim>/ in the client folder, 256×256-block tiles): ground seen once stays mapped in every later session. Together with the npc registry the map fills itself in through ordinary use - hollow dot in unexplored land → click-teleport → chunks load → the terrain is cached for good.

The cost is exactly why this variant was chosen: zero server load, zero traffic. The mechanics: an LRU of up to 64 tiles in memory (~16 MB), evicted tiles save to disk and free their texture; disk loads are budgeted at 4 tiles per frame, so zooming far out fills in progressively without hitching; worlds are keyed by server and dimension so two worlds' ground can never mix.

46. Limits into the config + full verification

The "N / MAX" corner counters are no longer constants. Three new options in config/CustomNpcs.cfg, each clamped to 1–9999: LimitConditions (availability conditions per block, default 32), LimitQuestBranches (branch candidates per quest, default 16), LimitTradeOffers (offers per trader, default 512). The caps are server-side: one packet at login syncs them to the client, so an admin's editor gates on the server's limit, not its own config; hosting locally re-applies the local config. Lowering a limit trims oversized data on load — mind your backups.

The verification pass over 0.0.14–0.0.16 (full typecheck, widget-id scan, lang audit, manual walkthroughs plus parallel adversarial review) found and fixed four defects: the terrain cache thrashed disk and textures at far zoom (visible tiles can exceed the LRU cap; eviction now spares the current frame and missing tiles are remembered), the map registry lost its last minute of updates on server stop (now flushed at shutdown while the world folder is still known), a player standing exactly at 0,0 reset the map view on every window resize, and the dialog editor's toggle row overflowed the panel in Ukrainian (translation shortened).

This mod has no additional files