NPC Vehicles and Soldiers - AntonIT99/Flans-Mod-Ultimate-2.0 GitHub Wiki

NPC Vehicles & Soldiers

The separate NPC Vehicles & Soldiers mod requires Flan's Mod Ultimate and Custom NPCs. It makes AA guns, mechas, planes and vehicles from loaded content packs available as Custom NPC models.

NPC editor tab

On Forge 1.20.1 and NeoForge 1.21.1, the NPC editor includes a Wolff's Mod tab with per-NPC ranged weapon options. Switching to it saves the previous editor page in the same way as the standard tabs. The standard tabs, Delete and Close remain available. If the tab labels fill the top row, the new tab appears on a separate row above it.

The tab opens on an overview that lists its pages under four headings:

Combat

  • Equipment: equipped weapons/armor and dual wield, with the Equipment import page
  • Model stats: model properties and Flan weapon statistics, with the Model properties page
  • Firing: projectiles, grenades, native throwables, secondary bank, barrels, reload cycle and muzzles
  • Aiming: target leading, target motion tracking, gravity compensation, firing only when aligned and eye height
  • Turret: traverse and elevation, the hull turning to aim, passenger guns and the turret lock
  • Protection: model damage profile and armour, Flan damage types, invulnerability, part hitboxes and part health with the Edit part hitboxes page, knockback and minimum hits

Movement & senses

  • Detection & ranges: aggro and firing range beyond the editor limit, sight through transparent blocks and target retention
  • Terrain & speed: terrain profile, wade and water depth, land and water speed
  • Driving: how a ground vehicle accelerates, brakes, steers, corners, reverses and keeps its distance, on the Handling, Steering and Reversing & distance tabs
  • Flight & diving: flight type, attack altitude, plane speed and submarine running depth
  • Pathfinding: path search range, detour margin and pursuit interval

Look & sound

  • Model state: animation, doors, gear, wings, engine and rider seat
  • Animations: weapon and armor animations, gun shot, reload and melee animations
  • Effects: hurt flash, death rotation, hide killed body and shooting particles
  • Sounds: Flan weapon sounds, model idle/step sounds and vehicle engine sounds, on the Weapon, Model and Vehicle engine tabs

Advanced

  • Performance & debug: target-search cadence, staying active at a distance, model culling and movement debug
  • Server (all NPCs): target-search intervals for every NPC, profiling and benchmarks

Hover a page for what it holds. A page that holds more than fits shows named tabs below its title, and the title is the path to the page, for example Combat > Model stats > Model properties. See Vehicle simulation and Movement and senses for the simulation pages.

Use Back to return to the containing interface. All presentation controls remain inside the Wolff's Mod tab.

Equipped armor and weapons (Forge 1.20.1 and NeoForge 1.21.1)

The Wolff's Mod tab enables Use equipped armor, Use equipped weapons, Armor animations and Weapon animations by default. These four switches are independent. Existing saves with missing switches receive those defaults.

Equipment is authoritative. The NPC executes item attacks and the native armor damage pipeline; editor readouts are display only and never become copied combat settings. Saved NPC fields remain intact. Disabling an equipment switch exposes the saved NPC behavior again. Equipped weapons take precedence over model weapon inheritance; model health, movement and other unrelated properties still apply.

Equip armor in the four armor slots. Vanilla and modded equipment contributes its slot attribute modifiers, armor points, toughness, knockback resistance, enchantment protection and durability. Flan armor also contributes its defined normal/bullet defense, movement and jump modifiers, fall protection, water breathing, fire protection, water walking and other native equipment effects. The Custom NPCs linear resistance multipliers are bypassed while armor authority is enabled, including when the armor slots are empty. The resistance menu shows read-only protection previews at ten incoming HP; actual reduction varies with hit strength, damage tags, toughness and enchantments. Flan bullet defense is resolved separately by the native shootable damage path. Defined fire, water and fall protections also show read-only values in Stats.

Flan armor defined with Invisible true hides the NPC's body while Use equipped armor is on: the skin and Custom NPCs body parts are not drawn, and the armor and held items stay visible. This is visual only; other mobs and NPCs detect the NPC as before. The model picker's class preview shows the same when the class or team armor is invisible.

The primary weapon slot supplies the attack. Melee weapons use all three item attribute operations against vanilla combat bases, their attack speed and reach modifiers, enchantment damage/knockback/fire aspect, post-hit hooks and durability. Custom NPCs' configured melee damage and potion effects do not drive these attacks. Shields in either hand use native blocking and wear; weapons honoring Forge's shield-disable hook can disable an NPC's raised shield. Held Flan shields use their defined front-facing block chance, maximum blockable hit strength and damage absorption, including against Flan rounds.

Flan guns fire their loaded magazines, consuming rounds and preserving attachments, mixed-belt position, native hitscan/projectile selection, recoil, drop-on-shoot and consume-on-use behavior. Automatic weapons retain fractional cadence, including multiple rounds per tick, and miniguns spin up before firing. Authored muzzle flashes, suppressed/last-round/distant firing sounds and reload sounds follow the item. The Projectile slot supplies spare compatible magazines after the gun's reload delay; spent magazines honor drop-on-reload. A dry gun cannot synthesize free ammunition. Throwable Flan guns and tridents create their real recoverable weapon entities and remove the thrown stack from the hand. Bows use the Projectile slot's arrow item, including custom arrow creation, power/punch/flame/infinity; crossbows retain charged ammunition, arrow/firework velocity, piercing, multishot and durability. Snowballs, eggs, ender pearls, splash/lingering potions and held Flan grenades launch their native entities and consume the held item. Riptide tridents are not thrown.

Dual wield (default Yes) also fires a second Flan gun held in the off hand. It keeps its own cadence, spin-up and reload, reloads from the Projectile slot, and starts half a beat behind the main hand so two guns alternate. The handling rules are those of players: a two-handed gun does not fire while the other hand is full. With No, the off hand is only used for shields. Throwable Flan weapons and non-Flan items fire from the main hand only.

Held Flan guns also play their own model animations, each with its own switch under Animations, all default Yes:

  • Gun shot animation: slide or pump, hammer, casing and muzzle flash model on each shot.
  • Gun reload animation: the reload animation, for as long as the reload lasts.
  • Gun melee animation: the melee animation when the NPC strikes with the gun.

Flan melee sounds, under Sounds > Weapon, plays the gun's melee sound. These apply to equipped weapons and, when Use equipped weapons is off, to a Flan gun the NPC merely holds: it animates on each projectile-slot shot, and the pause after each Custom NPCs burst counts as its reload. Arm poses stay governed by Weapon animations.

The existing NPC target selection and ranged distance still control whom the NPC engages. Native ranged equipment adds charge, reload and firing timing rather than using NPC burst or projectile-effect settings. Compatible subclasses of vanilla equipment use their native hooks. Modded ranged items whose use requires a player-specific controller can implement the NPC module's NpcWeaponAdapter; arbitrary player-only weapon controllers are not automatically emulated.

Enforced melee, ranged, projectile and armor controls are grey and read-only with source tooltips. Weapon damage previews use a generic target and loaded ammunition; actual impacts can vary by target or belt round. Values without a reliable scalar equivalent show Item behavior. On NeoForge 1.21.1, conditional enchantment damage, knockback and armor protection also show Item behavior, because their effects require the actual server target and damage source. Turning animations off preserves protection, attacks and equipment rendering: armor uses its resting pose, and added weapon aiming, charging and blocking poses are suppressed.

The reusable Flan inspection/action API is documented on API.

Inherit the selected model's properties (Forge 1.20.1 and NeoForge 1.21.1)

Wolff's Mod > Model stats > Use model properties is enabled by default, including for older NPC saves. When an AA gun, mecha, plane or vehicle model is selected, it reads the corresponding loaded content type and applies the properties with meaningful Custom NPCs equivalents. Changing model, weapon bank or the switches updates the inheritance. A normal NPC model has no inherited properties.

Type property Custom NPCs control
AA health; driveable total HP, including resolved health scaling Stats > Health
AA TargetRange Stats > Aggro range and Ranged properties > Range
Selected weapon bank's damage, spread and velocity Projectile properties > Strength/Speed; Ranged properties > Accuracy
Selected bank's ShootDelay/RoundsPerMin, with mounted-gun timing resolution Ranged properties > Minimum delay, Maximum delay and Burst delay
Reload cycle (Flan ammunition): reload time and magazine Ranged properties > Minimum and Maximum delay show the reload time, Burst count the triggers per magazine
Native Flan attack trigger Ranged properties > Burst count and Shot count are one; Flan supplies the actual barrels and pellets
Ordinary item projectile pellet count Ranged properties > Shot count, when the selected bank has one common value
Driveable WorksUnderWater Stats > Can drown, inverted
Driveable FallDamageFactor; mecha TakeFallDamage/FallDamageMultiplier Stats > No fall damage
Mecha MoveSpeed or resolved real maximum speed AI > Movement > Walking speed, with a unit-speed engine and no addons
Mecha Reach Melee properties > Range
Driveable IdleSound Advanced > Sounds > Idle (mechas; vehicle/plane audio uses Sounds > Vehicle engine)
Driveable EngineSound; mecha StompSound Advanced > Sounds > Step (vehicle/plane engines use Sounds > Vehicle engine)
Selected bank or mounted gun firing sound Ranged properties > Firing sound

The main Stats menu keeps its standard labels without an added read-only notice banner. Inherited values and their source tooltips remain visible.

Mapped controls display the converted type values in grey, read-only form. Hover them for the controlling option. Distinct native mount values are shown with / separators. Weapon readouts are type defaults before ammunition, attachments and firing stance modify the shot, rather than a prediction of damage to a particular target. Empty sounds and missing velocity declarations keep NPC fallbacks available. Flan weapon stats and Flan firing sounds still gate their corresponding inherited fields. Model idle and step sounds separately gates idle/step inheritance.

Values are converted to Custom NPCs units and limits: accuracy is derived from spread, projectile speed is ten times blocks/tick, and walking speed is twenty times blocks/tick. Integer values are rounded up, except NeoForge 1.21.1 melee range, which rounds to the nearest whole block. Health respects the live maximum health attribute's bound (normally 1024 HP). The native firing loop carries fractional intervals between shots but can fire at most once per game tick. Magazine capacity and reload time become burst settings while Reload cycle is enabled; see Reload cycle. Ammunition remains a reusable template either way: the projectile slot is never consumed.

Inherit, keep or import each property (Forge 1.20.1 and NeoForge 1.21.1)

Wolff's Mod > Model stats > Model properties lists every value the selected model offers, in four tabs (General, Weapon, Timing, Sounds). Each row shows the model's converted value and two buttons:

  • Inherit / Custom. Inherit follows the model and shows the value read-only in the standard editor. Custom uses the NPC's own saved value, which becomes editable in the standard editor again. Switching to Custom keeps the value the NPC had saved.
  • Import. Copies the model's value into the NPC's saved value once and switches the property to Custom. Use it to start from a tank's statistics and then adjust its damage, accuracy, delay or sound for one NPC. It replaces the NPC's previous value. Import all does this for every value on the tab.

Custom values drive the NPC's native Flan attacks too, not only Custom NPCs' own projectiles:

  • Burst delay, Burst count and Minimum/Maximum delay each replace that part of the firing rhythm: the interval between triggers, the triggers per burst, and the pause after a burst. A model without a reload cycle fires steadily, yet can be given bursts and pauses this way.
  • Projectile damage, Accuracy and Projectile speed replace the model weapon's value for the shot; the rest still comes from the weapon. Ammunition that sets its own damage or velocity, such as kinetic rounds, keeps doing so, and those fields stay read-only.
  • Shot count sets how many times the weapon fires per trigger.
  • Firing sound plays the NPC's own sound instead of the weapon's.

The model's value is shown in green while it is in use and in grey once the NPC keeps its own. Properties the model does not offer show - and cannot be changed. Imports are carried out by the server when you leave the tab, so a button shows Queued until then. Modes are saved with the NPC, clones and presets.

Ammunition use and weapon switching (Forge 1.20.1 and NeoForge 1.21.1)

By default an NPC's ammunition is infinite: an equipped Flan gun reloads from a copy of the item in the Projectile slot, which is never used up.

Wolff's Mod > Equipment > Use up ammunition (default No) makes equipped Flan guns reload from the real items instead:

  • A reload takes one magazine from the Projectile slot for each empty magazine slot of the gun.
  • When the Projectile slot is empty, or holds something the gun does not take, the next ammunition the gun takes is moved there from the NPC's inventory slots, the nine slots Custom NPCs lists as its drops. Whatever the slot held moves to the inventory slot the ammunition came from.
  • A gun in the off hand reloads from the same supply.
  • An NPC with nothing left to reload with does not play a reload.

Ammunition that is used up is gone: it is not restored when the NPC respawns, and it is no longer dropped. The setting applies to guns the NPC holds, with Use equipped weapons on. Model weapons of vehicle NPCs and ammunition fired directly from the Projectile slot stay infinite.

While Use up ammunition is on, the page also shows When out of ammunition, which decides what happens once the main-hand gun has no ammunition left in the Projectile and inventory slots:

Value Behaviour
Guns and melee (default) Take the first gun in the inventory that is still loaded or that the NPC has ammunition for; deployable guns are skipped. Once no gun is usable, take a melee weapon.
Melee only Take a melee weapon.
None Keep the empty gun.

The melee weapon taken is the inventory item with the highest melee damage; an item that hits no harder than an empty hand does not count. The gun put away takes the inventory slot of the weapon taken. Only the main hand switches: an off-hand gun that runs dry stays where it is. The NPC does not switch back by itself when ammunition is added later.

Import equipment statistics (Forge 1.20.1 and NeoForge 1.21.1)

Wolff's Mod > Equipment > Equipment import copies what the NPC's equipment does into the Custom NPCs statistics once. These are the values Custom NPCs uses while Use equipped weapons or Use equipped armor is off, so you can import a weapon or armor set, switch the authority off and tune the NPC by hand. The values are the same ones the read-only readouts show.

Import Copied into
Melee stats from the main-hand item Melee strength (with enchantments), range, delay, knockback, and fire from Fire Aspect
Ranged stats from the main-hand item Projectile strength, speed, gravity and explosion size; accuracy, shot count and firing sound; delay, burst count and burst delay
Resistances from worn armor Projectile, melee and explosion resistance and knockback resistance; fire immunity, no drowning and no fall damage where Flan armor grants them

A Flan gun's magazine becomes one burst and its reload time the delay. A gun that fires slower than the editor's longest burst delay (30 ticks), or holds a single round, fires one shot per cycle instead. Armor protection is nonlinear, so the resistances are measured on a ten-HP hit. Nothing is imported from an empty hand or without armor.

The original NPC fields remain its saved defaults in normal saves, clones, presets and editor packets. Disabling inheritance, switching a property to Custom or selecting a normal model restores them. A health change preserves the NPC's damaged fraction; repeated ticks do not heal it. Inherited saves record the effective maximum separately, so damaged hulls reload correctly and old healthy NPC saves remain healthy when first inheriting HP. Properties without a suitable type counterpart remain editable, including respawn, dialogue, factions, regeneration, hurt/death sounds, targeting policy and armor resistance controls when equipped-armor authority is disabled. Plane flight physics and vehicle drivetrain speed do not translate directly to a living NPC's walking speed. Inheritance does not turn the NPC into a live driveable or add its fuel, inventory or animation. On Forge 1.20.1 the model's hull armour and damage profile do protect the NPC; see Protection.

Flan ranged attacks (Forge 1.20.1 and NeoForge 1.21.1)

When Use equipped weapons is disabled (or the primary weapon slot is empty), place a Flan bullet, shell, missile, ammunition belt or grenade item in the NPC's Inventory > Projectile slot. For a soldier, equip a Flan gun in the main hand to use that gun's statistics, attachments, pellet count and sound. For a Flan vehicle, plane, mecha or AA model, the selected model supplies its weapon bank and muzzle positions. A point naming a mounted gun uses that gun's definition. Models without weapon positions launch from the NPC's eyes.

The NPC launches Flan's real projectile entities on the server. Their content definitions control penetration, damage effects, homing, trails, bounce, fuses, smoke and explosions. Even a gun normally using hitscan launches an actual bullet with Flan's fallback velocity. NPC faction and target selection remain handled by Custom NPCs; the NPC receives damage credit for its shots.

When model-property inheritance does not replace a field, Stats > Ranged properties controls range, delay, burst count, burst spacing and shot count. Editable shot count repeats the weapon's shot at each selected muzzle, including its configured pellets. Ammunition is a reusable template; this integration does not consume the projectile slot. Mixed ammunition belts advance their round selection as the NPC fires; the transient sequence restarts when the NPC is loaded.

Reload cycle (Forge 1.20.1 and NeoForge 1.21.1)

With Reload cycle (default Yes), a model weapon firing Flan ammunition keeps the rhythm of the placed AA gun or vehicle: it fires its magazine one trigger at a time, then waits for the reload.

  • AA guns empty every ammunition slot. A magazine lasts the ammunition's RoundsPerItem per slot: once per barrel, or once in all with ShareAmmo. Barrels fired together spend a round each per trigger; FireAlternately spends one. The reload lasts ReloadTime times the ammunition's ReloadTimeMultiplier, and never less than the firing interval.
  • Vehicle, plane and mecha banks reload after the smaller of the declared ReloadRounds and the rounds one item holds, for the bank's reload time. A bank of mounted guns slows down for ammunition with a reload multiplier; shells, bombs and missiles chamber at their own pace.

The reload sound plays when the reload begins: the AA gun's ReloadSound, a mounted gun's own reload sound or the bank's. A main gun also plays ShootReloadSound at VehicleGunReloadTick before it is ready again. Both follow Flan reload sounds. Losing the target does not cut a reload short. The standard editor shows the reload time as the delay and the magazine as the burst count. With No, the weapon fires continuously at its firing interval.

Without a Flan model, Custom NPCs' own burst and delay settings apply as before.

Native throwables (Forge 1.20.1 and NeoForge 1.21.1)

With Native throwables (default Yes), these items in the Projectile slot fly as the real thing instead of as a Custom NPCs projectile showing their picture:

Item Result
Splash and lingering potions Break and apply their effects or leave their cloud
Experience bottles Burst into experience
Eggs Vanilla eggs, with their chance of chicks
Firework rockets Fly at the target and explode with their stars
Fire charges Small fireballs that set fire to what they hit

Custom NPCs keeps the trigger, cadence, burst, shot count and firing sound. Accuracy sets the scatter, and indirect fire lobs potions, bottles and eggs in a high arc. Lead moving targets and Gravity compensation apply. The NPC's ranged strength does not: these items do what they do in vanilla. Other items, snowballs included, stay with Custom NPCs, whose projectile deals the NPC's ranged damage.

The Wolff's Mod tab provides these options:

Option Default Behavior
Use equipped armor Yes Armor slots drive native armor, enchantment protection, wear, attributes and Flan equipment effects. Readouts never overwrite NPC resistance values.
Use equipped weapons Yes Execute the primary item's attacks, using real magazines/arrows, durability, charge/reload and throw behavior. Takes precedence over model weapon properties.
Armor animations Yes Animate equipped armor; No renders armor in its resting pose without changing protection.
Weapon animations Yes Show added equipment aim, charge and block poses; No leaves attacks and protection active.
Use model properties Yes Inherit supported properties from the selected AA gun, mecha, plane or vehicle type and display their converted values read-only. No restores saved NPC defaults.
Flan projectiles Yes Use real Flan bullets and grenades. No restores Custom NPCs' ordinary item-projectile behavior.
Flan grenades Yes Use real grenade physics, fuse and effects. No restores ordinary behavior for grenade items alone.
Model muzzles Yes Use the selected model's weapon positions, resting height, NPC size and body rotation. No fires from eye height.
Alternate barrels Yes Honor alternating banks and AA guns; cycle the barrels of twin/quad mounts. No fires all barrels together.
Flan weapon stats Yes Use the held or mounted weapon's damage, spread, velocity and pellet count. No uses NPC damage, accuracy and speed as weapon defaults.
Flan firing sounds Yes Use content shooting audio. No mutes equipped Flan gunfire; model/template shots use the configured NPC firing sound.
Flan reload sounds Yes Play equipped Flan gun reload audio independently of firing sounds.
Flan throw sounds Yes Play Flan grenade and throwable-gun launch audio. No mutes equipped Flan throws; template grenades use the configured NPC firing sound.
Model idle and step sounds Yes Inherit model idle/footstep sounds independently of weapon audio. Requires Use model properties; vehicle/plane engines use Sounds > Vehicle engine.
Flan melee sounds Yes Play a held Flan gun's melee sound when the NPC strikes with it.
Dual wield Yes Fire a second Flan gun held in the off hand, with its own cadence and reloads.
Native throwables Yes Throw potions, experience bottles, eggs, fireworks and fire charges from the Projectile slot as their vanilla entities.
Reload cycle Yes Model weapons fire their magazine, then reload for the model's reload time. No fires continuously.
Gun shot animation Yes Play a held Flan gun's shot animation and muzzle flash model.
Gun reload animation Yes Play a held Flan gun's reload animation while it reloads.
Gun melee animation Yes Play a held Flan gun's melee animation when the NPC strikes with it.
Model damage profile Yes Take Flan damage as the selected model would. See Protection.
Model armour Yes Resolve kinetic rounds and shaped charges against the model's armour.
Part hitboxes Yes Flan rounds and explosions hit the model's part boxes, as on the real driveable. See Protection.
Part health Yes Each part holds its share of the NPC's health; the NPC dies with its core.
Broken parts take effect Yes Broken turrets, tracks, wheels, engines and wings cost the NPC what they cost a driveable.
Broken parts let rounds through Yes A broken part no longer stops rounds and blasts.
Healing rebuilds parts Yes Regained health is shared out among damaged and broken parts.
Solid hitboxes No Players and other entities collide with the part boxes and can stand on them.
Outline hitboxes No Draw the NPC's part boxes.
Recognize Flan damage types Yes Apply NPC resistances to Flan melee and to damage tagged as projectile or explosion.
Invulnerable No Ignore all damage except /kill and the void.
Shooting particles Yes Emit the selected bank's authored particles at the fired muzzles, or a small muzzle flame when none are defined.
Lead moving targets Yes Aim ahead using current target velocity and projectile flight time.
Gravity compensation Yes Account for Flan gravity, air drag and dimension physics. Indirect attacks prefer a higher arc.
Secondary weapon No Select the secondary bank instead of the primary bank. Only the selected bank fires.

Sounds > Weapon contains the independent Flan firing sounds, Flan reload sounds, Flan throw sounds and Flan melee sounds toggles. All default to Yes for new NPCs. Older saved Flan firing sounds preferences migrate to each new sound toggle, including Model idle and step sounds in the parent menu. Explicit individual settings take precedence and survive saves, clones and presets. Vanilla weapon audio is unchanged. Template grenade launches play their throw clip without also playing a model gunfire clip.

Weapon defaults do not override ammunition-defined muzzle velocity, mass or explosive behavior. Grenades retain their configured throw speed. Firing-audio and shooting-particle switches affect the launch presentation; impact sounds, projectile trails and explosions continue to use the ammunition definition.

Options are saved with the NPC, clones and presets through the existing Custom NPCs stats transport, with the same wand and editing permissions. Old NPCs that have no saved options receive the defaults above. The editor waits for current server settings before allowing changes.

The ordinary Ranged properties and Projectile properties dialogs keep overridden settings visible in grey, read-only form. Hover the value or its label to see whether Flan weapon stats, Flan firing sounds, or the ammunition controls it. Model inheritance shows type values as described above. Other overridden fields show the saved Custom NPCs fallback values. They are retained and become editable again when the corresponding option is disabled or ordinary ammunition is selected.

Locks apply only to the current Flan attack: weapon damage and accuracy lock when weapon statistics replace them; kinetic ammunition and grenades always supply their own damage, and ammunition-defined velocity takes precedence. AA or unarmed speed fallbacks remain editable when needed. Mixed belts and weapon banks keep a setting editable if any round or mount still uses the NPC fallback. Firing sound remains editable when content has no replacement; hit/ground sounds, projectile appearance, gravity, acceleration, knockback, trails, explosions and effects belong to the native Flan projectile. Fields without model inheritance, including aim animation and targeting policy, remain editable. Idle and step sounds can inherit model properties; hurt and death sounds remain editable.

Muzzle positions currently follow the module's static model pose. This does not add vehicle turret animation or AA recoil animation. Equipped handheld weapons have independent aiming, charging and block poses as described above. Projectile aim is calculated separately from that static pose. Interception uses air physics and current target velocity; it does not predict future target turns, obstacles or water entry. Unreachable trajectories fall back to direct aim.

The Custom NPCs rangedLaunched event is still emitted once per attack. Its projectiles list is empty for native Flan entities, which do not implement Custom NPCs' item-projectile wrapper. Flan handles their impacts and explosions.

Protection (Forge 1.20.1 and NeoForge 1.21.1)

Wolff's Mod > Protection decides how the NPC takes damage. The settings are saved with the NPC, clones and presets, and NPCs saved before them keep the defaults below.

Control Default Behavior
Model damage profile Yes Flan bullets, grenades and explosions damage the NPC as they would its model.
Model armour Yes Kinetic rounds and shaped charges meet the model's armour. Needs Model damage profile.
Recognize Flan damage types Yes NPC resistances apply to Flan melee and to tagged projectile and explosion damage.
Invulnerable No Ignore all damage. /kill and the void still apply.
Part hitboxes Yes Flan rounds and explosions hit the part boxes of the selected vehicle, plane or mecha.
Part health Yes Each part holds its share of the NPC's health; the NPC dies with its core. Needs Part hitboxes.
Broken parts take effect Yes Broken parts cost the NPC its gun, its speed or its flight. Needs Part health.
Broken parts let rounds through Yes A broken part no longer stops rounds and blasts.
Healing rebuilds parts Yes Health the NPC regains is shared out among its damaged and broken parts.
Solid hitboxes No Players and other entities collide with the part boxes and can stand on them. Needs Part hitboxes.
Outline hitboxes No Draw the part boxes around the NPC.
Knockback By model By model makes AA gun, mecha, plane and vehicle NPCs immune to knockback; Immune and Normal apply to any model.
Minimum projectile, melee and explosion hit 0 Ignore weaker hits of that kind. 0 accepts every hit.

The page has three tabs: Damage for the first four switches, Part hitboxes for the next seven, with the Edit part hitboxes button beside Back, and Knockback & minimum hits.

Model damage profile. Ammunition can declare different damage against living entities, vehicles and planes. An NPC that looks like a plane takes the damage against planes, a vehicle or mecha the damage against vehicles, and an AA gun the base damage, as the placed AA gun does. This covers fixed-damage rounds, grenades and Flan explosions. NPCs without a Flan model always take damage against living entities.

Model armour. Rounds with a projectile mass, and HEAT rounds, are resolved against the selected vehicle's armour with the same penetration rules as a real vehicle hit: armour that stops the round leaves the NPC unhurt, and a penetrating round deals the damage the real part would take. With Part hitboxes, the round meets the armour of the part and face it actually struck, turret and skirts included, and blasts are weighed against the plate of each part they reach. Without them the NPC is one hitbox: every hit meets the core armour, and the side struck (front, rear, left, right, top or bottom) is taken from the round's direction relative to the way the NPC's body faces. The impact angle counts either way. Models without authored armour let rounds through. With No, kinetic rounds deal their full damage whatever the armour.

Part hitboxes and part health (Forge 1.20.1 and NeoForge 1.21.1)

An NPC drawn as a vehicle, plane or mecha carries the part hitboxes of that model, as the real driveable does: the hull, the turret, each track, wheel, wing and armour plate the content pack defines. The boxes turn with the hull and with the turret, scale with the NPC's size, and may reach far past the NPC's own hitbox, as a ship's do.

Part hitboxes. Flan bullets, shells, missiles and explosions are traced against these boxes instead of the NPC's hitbox. A round strikes the part its path crosses first, loses that part's penetration resistance, and carries on into the parts behind it while it has penetrating power left. An explosion damages every part it reaches, each by its own distance and cover. Melee, vanilla arrows, fire, falls and player clicks still use the NPC's own hitbox, and Custom NPCs still paths with it. AA guns and models without part boxes keep the single hitbox. With No, everything hits the NPC's hitbox, as before.

Part health. The NPC keeps one pool of health, as any Custom NPC does, and its parts share it out: each part holds the share of the NPC's maximum health that its hit points are of all parts' hit points together. With the health inherited from the model, every part therefore holds exactly the hit points the content pack gives it. A hit takes the damage the NPC would have taken from the part it struck, after its resistances and minimum hits, and never more than that part has left: shooting off a track does not kill the tank. Breaking a part breaks the parts that hang on it, as a wing takes its wheel along. The NPC dies when its core breaks. Damage that names no part, such as melee, vanilla projectiles and fire, goes to the core, as on a driveable, and fire keeps burning the part for a second. The hit points of the parts are saved with the NPC. With No, the parts are only hitboxes: any part hit takes the NPC's health directly.

Broken parts take effect. A broken turret or barrel silences the gun and stops the turret turning. One broken track halves a vehicle's speed and both stop it; each broken wheel takes its share of the speed; broken engine rooms, boilers, bow and stern slow it by what they cost a driveable's throttle. A mecha without hips stands still, and without either arm cannot fire. An aircraft that loses a wing, its tail, its rotor blades or its airframe is shot down.

Broken parts let rounds through. A broken part has been shot off: rounds and blasts pass where it was until it is rebuilt. With No, broken parts stay in the way and soak up further hits without losing anything.

Healing rebuilds parts. Health the NPC regains, through Custom NPCs health or combat regeneration, a script or a respawn, is shared out among its parts in proportion to what each is missing, and broken parts come back. With No, broken parts stay off until the NPC respawns, and the health they held cannot be regained.

Solid hitboxes. With Yes, the part boxes are solid to players and other entities, with the collision a real driveable's hull has: they walk into the boxes, stand on them, and are carried along as the NPC moves and turns, so the deck of an NPC ship can be walked on. The NPC itself, its riders and its mount pass through; it still moves and finds its way by its own hitbox, so its boxes may pass through terrain its hitbox clears. Broken parts are solid only while they still stop rounds, and a killed NPC is not solid. The boxes that are solid are the part boxes as edited below, not the collision meshes some content packs give the real driveable. It is off by default: NPCs placed inside the model, such as a crew, would be pushed out of it.

Outline hitboxes draws the boxes for this NPC: yellow while a part can be hit, red once it is broken. What is drawn is what rounds hit. Flan's debug rendering shows them for every such NPC.

Edit part hitboxes

Protection > Part hitboxes > Edit part hitboxes changes the parts of this NPC without touching the content pack. It shows one part at a time; < and > step through the parts of the selected model.

Control Behavior
Part in use No takes the part out of this NPC: it is not hit, holds no health and cannot be broken.
Box Model uses the part as the model defines it. Custom gives the NPC its own values, starting from the model's.
Hit points Hit points of the part in the model's units. 0 makes a part that stops rounds but cannot be broken.
Resistance Penetrating power a round loses passing through the part.
Corner X / Y / Z The corner of the box with the smallest coordinates.
Size X / Y / Z Size of the box along the same axes.
Reset part, Reset all Return one part, or every part, to the model's.

Coordinates are in model pixels of a sixteenth of a block, from the model origin: X to the right, Y up, Z to the rear. A part on the turret is given with the turret at rest and turns with it. The page shows the model's own values for comparison, and how much of the NPC's health the part holds.

Hit points decide how the NPC's health is shared out; the NPC's own health decides how much there is. To make the whole NPC tougher, raise its health (keep your own value for Health on the Model properties page). To make one part tougher than the rest, raise that part's hit points. Taking the core out leaves an NPC that only dies once all its health is gone.

The changes are saved with the NPC, clones and presets, and apply when the tab is left. Changes to parts of another model are kept while that model is not selected.

Minimum hits drop a hit entirely when it is weaker than the value: no damage, no knockback, no retaliation. A hit of exactly the value counts. They are compared with the incoming damage before armor and resistances, after the model damage profile. Use them for targets only heavy weapons should hurt.

Recognize Flan damage types matters while Use equipped armor is off, since equipped armor otherwise replaces the Custom NPCs resistances. Custom NPCs only recognizes a few vanilla damage names, so Flan gun melee would bypass the melee resistance. With Yes, melee resistance covers Flan melee and attacks struck directly by a living attacker, and the projectile and explosion resistances cover any damage type carrying the vanilla projectile or explosion tag.

Knockback immunity uses the vanilla knockback-resistance attribute, as heavy vanilla mobs do. Hits no longer shove the NPC; explosions still push it.

Hurt effects and vehicle audio (Forge 1.20.1 and NeoForge 1.21.1)

All new controls are inside Wolff's Mod, saved with NPCs, clones and presets through the existing permission-checked stats menu and synced with spawn/update data. Selecting a Flan AA gun, mecha, plane or vehicle model resets Hurt flash and Death rotation to No. This also applies to older Flan NPC saves without model-specific display defaults. Later manual choices persist for that model across updates and reloads. Selecting a different Flan model resets both to No; switching to an ordinary model restores normal Yes defaults. Existing ordinary NPC saves retain their display choices.

Effects provides Hurt flash, Death rotation and Hide killed body. Hurt flash disables the red hurt/death overlay while preserving skin tint. Death rotation independently controls tipping over. With rotation disabled and Hide killed body enabled, the body disappears immediately; otherwise it remains upright. Hide killed body edits Custom NPCs' existing setting. Damage, timers, invulnerability, knockback, hurt/death sounds, scripts, drops and respawn remain unchanged. Flan models support ordinary and simple rendering; the 64x32 skin renderer also honors hurt flash.

Sounds > Vehicle engine controls engine audio independently of Use model properties and the weapon sound toggles. Defaults come from the selected Flan vehicle or plane definition. Mecha stomps retain footstep timing; AA models supply no default engine audio. Custom audio also works with other NPC models. Vehicle/plane engine and idle audio no longer inherit Custom NPCs' step and ambient fields, preventing those from bypassing these switches. Saved NPC footsteps remain available when movement audio is disabled or unavailable.

Control Default Behavior
Enable engine idle sound No Play stationary engine clips.
Enable engine movement sound Yes Play during movement, including reverse, flight and swimming.
Engine movement sound variable pitch Yes Visible when movement is enabled; follow actual speed and the vehicle pitch curve, normalized against NPC walking speed.
Use vehicle's defaults Yes Follow current vehicle sound definitions and effective ranges. Switching to Yes resets both custom editors and clears repeat overrides.

Edit engine idle sound and Edit engine movement sound are always visible, including when their channel is disabled. With Use vehicle's defaults = Yes, their parameters show the current vehicle defaults and are read-only; range and repeat values remain visible in gray fields. With No, the editors allow changing:

  • Sound: a field displays the selected sound event ID, with Select and Clear buttons alongside it. Select opens the native Custom NPCs Fire Sound selector, including preview and namespace selection. It starts with the vehicle sound, or the flansmod namespace when none is defined. Other mod and resource-pack events work too. Clear explicitly silences the custom channel.
  • Range (blocks): initially the synchronized server vehicle sound range, editable from 1 to 4096. Resetting defaults restores the vehicle's effective range, including server pack-range policy.
  • Override repeat interval: defaults to No; visible only for sounds in the flansmod namespace. Other namespaces have no known asset length, so their interval is manually configured.
  • Repeat interval (ticks): 1 to 12000 ticks; 20 ticks equals one second. With no override, a Flan sound displays its measured asset length in gray. Unknown lengths fall back to the authored channel timer or 20 ticks. Non-Flan sounds always allow editing this interval.

Idle and movement replace each other. Both stop for killed, silent or removed NPCs. Sound, interval, channel and pitch-mode changes cancel the preceding clip; short intervals cannot stack clips. Automatic Flan timing accounts for changing pitch; overridden and non-Flan intervals stay fixed in game ticks. Idle uses IdleSound, then StartSound, then EngineSound. Movement uses EngineSound, with EngineSoundLength, legacy StartSoundLength or 20 ticks as an unknown-length fallback.

The server schedules clips independently of footsteps. Tracked emitters carry the sound as they move. Sub-centimetre jitter and jumps of 16 blocks or more per tick do not trigger movement audio. Listeners outside tracking hear positional clips at normal pitch. Entering the radius mid-clip waits for the next start. Tracking and simulation distances remain unchanged.

Vehicle simulation (Forge 1.20.1 and NeoForge 1.21.1)

An NPC drawn as a Flan AA gun, mecha, plane or vehicle behaves like the machine it looks like. Every control is in the Wolff's Mod tab, is saved with the NPC, clones and presets, and keeps the default below on NPCs saved earlier. In number fields, 0 usually means "decided by the model".

Turret

These controls are on the Turret page, except Fire only when aligned and Alignment tolerance, which are on Aiming.

Control Default Behavior
Gradual traverse Yes The turret and seat guns turn and elevate at a limited speed, within the limits of the model's seat. No snaps the gun onto the target within those limits.
Traverse speed, Elevation speed (°/s) 0 0 uses the aiming speed of the model's driver seat.
Fire only when aligned Yes The NPC holds its fire until the gun points at its firing solution. Its cooldown and its burst are not spent while it waits.
Alignment tolerance (°) 4 How far off the gun may be and still fire. The shot itself is always aimed exactly.
Hull turns to aim Yes A vehicle standing still turns its hull toward a target its gun cannot reach: a gun fixed to the hull, or a turret with a limited traverse.
Passenger guns track Yes Seat guns of the model turn toward the target on their own. They are drawn aiming; they do not fire.
(mecha arms) A mecha has no turret; its arms raise and lower with its aim instead, at the elevation speed and within the model's arm limits. Lock turret freezes them.
Lock turret No Freezes the turret and seat guns where they are.

A turret is recognized by its muzzles: a model whose weapon positions sit on its turret, and every AA gun, aims a turret. Any other model has a fixed gun, and with Fire only when aligned a vehicle then waits for its hull to face the target. A limited traverse is never crossed the short way round through the arc the gun cannot reach.

The server decides hull, turret and seat-gun directions and sends them to the clients tracking the NPC, at most every other tick and only when they change.

On the Firing page, Muzzles follow the turret (Yes) launches shots and shooting particles from where the turret or AA gun currently points instead of from the barrel's rest position. On the Aiming page, Track target motion (Yes) leads a target by its smoothed movement over recent ticks, with a cautious estimate of its acceleration, instead of its velocity in a single tick. A teleport or a gap in the observations starts over. Lead never exceeds 100 ticks of flight, 96 blocks sideways or 48 blocks up or down. Shots aim at the middle of a large target and at the chest of a smaller one.

The turret elevates round the definition's TurretOrigin. A model whose barrel pivots elsewhere shows its muzzle flash slightly off the barrel tip at high elevation; the shot's direction is unaffected.

Vehicle

The hull controls are on the Steering tab of Driving, Riders sit in the driver seat on Model state and Eyes at the gun on Aiming.

Control Default Behavior
Hull follows travel Yes A vehicle drives where its hull points, and its hull turns toward where it wants to go at a limited rate while the turret stays on target. An AA gun's base keeps its facing. Planes and mechas turn like any NPC.
Hull turn rate (°/s) 0 0 uses 90.
Slow down while turning Yes Above 20° between hull and wanted direction the vehicle slows down, to its slowest at 90° or more.
Slowest while turning (%) 15 0 makes the vehicle turn on the spot before it drives off.
Riders sit in the driver seat Yes An entity riding the NPC sits at the model's driver seat, carried round with the turret when the seat is on it.
Eyes at the gun Yes The NPC looks and checks its line of sight from the height of its first muzzle.

Driving

With Driving controller (Yes), a ground vehicle no longer walks its path like a mob. It needs Hull follows travel; with the controller off, the plain hull steering of the Steering tab remains.

Control Default Behavior
Preset Custom Car, Truck, Bus, Light tank, Heavy tank or APC fill in type, acceleration, braking, coasting, turn radius, lookahead, corner speed and hull turn rate. The values stay editable; editing one switches back to Custom.
Vehicle type Automatic Wheeled has to roll to turn, on its turn radius. Tracked turns on the spot. Heavy tracked stops to turn sharply and turns more slowly. Automatic is Tracked for a tank model and Wheeled otherwise.
Acceleration, Braking, Coasting (%/s) 100, 250, 60 Share of full throttle gained, shed while braking, and shed with nowhere to go, per second. A vehicle brakes ahead of the end of its path, early enough to halt there; one whose path is taken away at speed, such as by coming into range of its target, rolls out at the coasting rate.
Turn radius (0.1 blocks) 0 Tightest turning circle of a wheeled vehicle; it widens with speed, to twice the radius at full throttle. 0 uses 3 blocks.
Path lookahead (blocks) 4 How far ahead on its path the vehicle steers and looks for corners. It steers past nodes only while the path runs straight and level.
Corner speed (%) 45 Share of its speed kept through a right-angle corner; gentler corners slow it less.
Allow reversing Yes A nearby goal behind the vehicle is reached in reverse instead of by turning round.
Reverse speed (%) 40 Top speed in reverse as a share of the forward one.
Reverse angle (°), Reverse distance (blocks) 110, 10 A goal further off the hull than the angle and no further away than the distance is reached in reverse.
Stop distance (blocks) 0 The vehicle stops this far from the end of its path. 0 drives all the way.
Following distance (blocks) 5 Distance kept to a vehicle NPC ahead; the vehicle stops at half of it. 0 ignores other vehicles.

A vehicle that pushes without moving, or keeps steering hard without coming round, backs up for a moment while its hull keeps turning toward the path, then asks for a new path. The top speed is the Land speed of the Terrain & speed page, or the NPC's walking speed. Custom NPCs still decides where the vehicle goes and the path search how; the controller only turns the path into motion. The Handling tab holds the controller, its preset and the throttle and turn-radius values, Steering the hull steering, lookahead and corner speed, and Reversing & distance the reversing, stopping and following controls.

Model state

These controls are on the Model state page, except Cull by model size, which is on Performance & debug.

Control Default Behavior
Animate model Yes Turret, seat guns, barrel recoil, wheels, steering, tracks and track links, propellers, rotors and mecha legs move. No draws the model at rest.
Doors open No Draws doors open.
Landing gear up No Draws an aircraft with its gear retracted.
Wings in second position No Draws variable or folding wings in their second position.
Engine running Yes Propellers and rotors turn, at idle while the NPC stands. A killed NPC's engine stops.
Full throttle No Draws full throttle with wheels and tracks turning even while the NPC stands.
Cull by model size Yes The client hides the NPC only when its whole model is out of view, so long ships and wide aircraft no longer vanish at the screen edge.

Animated models use the same model code, level of detail and caches as real driveables. A distant impostor shows the model at rest, as it does for a real vehicle. Mecha tools and the missiles loaded on a model are not shown, because an NPC has no driveable inventory.

An NPC without a content-pack model whose hitbox is switched off, which Custom NPCs makes a hair wide, is culled by the width its hitbox would have. A large one no longer vanishes when its middle leaves the view.

Summoning

Every model is a summonable entity: /summon wolffsmodnpcs:model/<short name>, or a spawner set to it, places a Custom NPC wearing the model with its default skin. The NPC can then be edited like any other.

Movement and senses (Forge 1.20.1 and NeoForge 1.21.1)

Movement

These controls are spread over Terrain & speed (terrain profile, wade and water depth, land and water speed), Flight & diving (running depth, flight type, attack altitude, plane speed), Pathfinding (path searches, detour margin, pursuit interval) and Performance & debug (movement debug).

Control Default Behavior
Terrain profile Default Ground avoids water deeper than the wade depth. Watercraft paths only through water at least the minimum depth, and floats. Amphibious treats land and water alike, and floats.
Wade depth, Minimum water depth (blocks) 1 Limits of the Ground and Watercraft profiles, measured under the whole width of the NPC: a Ground NPC keeps every part of itself out of deeper water, and a Watercraft needs the minimum depth under all of its hull.
Running depth (blocks) 0 A Watercraft with a running depth is a submarine: it runs that far below the surface, higher over shallows, and never runs out of air. Its paths are laid along the surface and it follows them from below. 0 floats.
Land speed, Water speed (0.1 blocks/s) 0 Approximate speed in tenths of a block per second: 45 is 4.5 blocks per second. 0 keeps the NPC's own speed. A fast watercraft also takes longer to speed up and to stop.
Flight type Normal For NPCs with the Flying movement type. Plane never stops, turns in circles as wide as its wandering range and loiters round its home. Helicopter may hover and turns its hull toward its target.
Attack altitude (blocks) 20 Height above the terrain a plane or helicopter climbs to. Below it the NPC keeps its target and makes no attack of any kind: not with its model's guns, not with held items, not in melee and not from a script.
Plane speed (0.1 blocks/s) 0 0 keeps a plane between 2.6 and 8.4 blocks per second.
Efficient path searches Yes A path search reaches its goal plus the detour margin instead of the whole aggro range, and a pursuit keeps its path for the pursuit interval.
Path detour margin (blocks) 24 Raise it where NPCs must go round large obstacles.
Pursuit path interval (ticks) 10 1 searches a new path every tick, as Custom NPCs does.
Movement debug No Shows the remaining path as red dust, the steering target of the driving controller as green sparks and the path's end as a flame, to players within 96 blocks, and writes the NPC's movement state to the server log once a second.

Custom NPCs stores the aggro range where Minecraft keeps the path search range, so without Efficient path searches a 512-block sniper searches a square kilometre for every path, and the combat goals ask for a new path on every tick while their target moves. Terrain profiles apply to the ground movement type.

An aircraft measures the terrain under it every half second: a helicopter also 3 blocks to each side, a plane also 8, 16 and 24 blocks ahead. It settles a few blocks above its attack altitude and descends only when far above it. Custom NPCs' flying movement still supplies the rest.

Senses

The sight controls and Keep target beyond aggro are on the Detection & ranges page; the target-search controls are on Performance & debug.

Control Default Behavior
Transparent blocks Normal See through sees through leaves, glass, panes, bars and fences but fires only with a clear line, and keeps closing in until it has one. See and fire through also fires through them.
See through at most, Fire through at most (blocks) 8, 4 How many such blocks may stand in the way.
Progressive target search Yes Targets are searched in distance bands (32, 64, 128, 256, 384 and 512 blocks), nearest candidates first, stopping at the first that qualifies.
Near search interval (ticks) 0 Between searches of the first 32 blocks. 0 uses the server's interval (10 unless changed on the Server page). All NPCs search them in the same tick, so a formation reacts together.
Far search interval (ticks) 0 Between searches of the farthest band; the bands in between scale. 0 uses the server's interval (60 unless changed). Each NPC searches them at a moment of its own.
Keep target beyond aggro (blocks) 0 An NPC keeps a target it already has this far past its aggro range. A tactical movement (surround, hit and run, ambush, stalk, dodge) always adds at least its own radius. The NeoForge 1.21.1 Custom NPCs build has no tactical movements, so there only this margin applies.

The see-through blocks are those of the wolffsmodnpcs:see_through block tag, which a data pack can extend. An NPC that fires through such blocks launches its round from where its line of fire leaves the last of them, so the cover it aimed through cannot stop the round. NPC line of sight is no longer cut off at 128 blocks: it reaches the server's Flan NPC tracking range, and it never loads a chunk to look through it.

Ranges

Aggro range and Firing range are on the Detection & ranges page; the two active-range controls are on Performance & debug.

Control Default Behavior
Stay active at a distance No The NPC keeps simulating while a player is within the active range, even beyond the server's simulation distance.
Active range (blocks) 128 Distance to the nearest player within which it stays active.
Aggro range, Firing range (blocks) The two Custom NPCs ranges, editable beyond the editor's 256 blocks. An inherited model property replaces them.

The server's Flan NPC tracking range is the upper limit of both ranges, in the editor and on NPCs loaded with larger values. The limit is at least 256 blocks, the standard editor's own. Stay active at a distance keeps the NPC's chunk ticking with a short-lived ticket renewed once a second; use it for the NPCs of a distant battle rather than for every NPC.

Server page and benchmarks

The Server page holds what applies to the whole server rather than to the NPC being edited. Anyone may read it; changing it and running the server benchmark take an operator (or the owner of a singleplayer world).

Control Default Behavior
Near and Far search interval, all NPCs (ticks) 10, 60 The target-search intervals of every NPC that does not set its own on the Performance & debug page. Saved with the world.
Profile target searches No Counts the searches, candidates, full tests and time of each distance band and writes them to the server log every ten seconds. Not saved.
Run server benchmark (30 s) Also /flansnpcbenchmark [seconds] and /flansnpcbenchmark stop, for operators and the console.
Run client benchmark (30 s) Closes the editor first. Also /flansnpcclientbenchmark [seconds].

The server benchmark leaves out a 5 second warm-up, then records every server tick: its duration, the time spent ticking NPCs, in path searches and in target searches, and how many NPCs ticked. Its report gives mean, median, 95th and 99th percentile and maximum of each, the NPC share of the tick, the totals of each target-search band, and the slowest path searches of 2 ms or more with the NPC, its position and its goal distance. The client benchmark leaves out a 3 second warm-up, then records every frame: its duration and the time spent drawing Custom NPCs. It reports the average frame rate, the rate of the slowest 1% of frames, and the NPC share of the frame. It stops early when a screen opens, the game pauses or the world is left.

Both write a summary (.txt) and the raw per-tick or per-frame figures (.csv) to logs/wolffsmodnpcs-benchmarks/. Runs last 5 to 600 seconds. Path searches are those of every NPC, walking, flying or swimming, and the report says how many found no path; a call that keeps its current path is not counted. NPC time includes the path and target searches NPCs start during their tick.

Armour on scaled NPCs

Flan armour follows the size and offset Custom NPCs gives each body part, so it fits NPCs with a larger head, a narrower body or shorter legs.

Choosing a model

On Forge 1.20.1 and NeoForge 1.21.1, the Custom NPCs entity model picker groups Flan models into folders at the top of the list:

  • Flan AA Gun
  • Flan Mecha
  • Flan Plane
  • Flan Vehicle
  • Flan Ship
  • Flan Soldier, see Flan's Soldiers

Ships use the same classification as FMU: Ships: water-only boats and legacy plane-based ships with disabled flight controls, plus definitions marked EpicShip. Their models appear only in Flan Ship, while amphibious vehicles stay in Flan Vehicle and seaplanes stay in Flan Plane. Existing NPCs and presets retain their model IDs.

Click a folder to see the content packs containing that kind of model, then click a pack to see its models. Click a model to select it and update the preview. The first row, .., goes back one level without changing the selected model. Models within each pack are sorted by their translated full names, ignoring case and using natural numeric order (for example, 2 before 10). Selecting a model or paintjob preserves the list's scroll position; entering a folder starts at the top. Going back with .. restores the parent list's previous scroll position at every level, including returning from paintjobs to the pack's models.

Hovering over a list entry whose name is shortened shows its full translated name in a tooltip. This also applies to content-pack, paintjob and soldier-folder entries, including search results.

Models with additional paintjobs open one more level containing Default first, followed by all paintjobs in ID order. Opening that level previews the default variant; choosing a paintjob updates the skin and saves the variant with the NPC and its presets. Paintjobs work with both ordinary and simple rendering. Models with only their default appearance are selected directly.

Flan previews are centered and fitted to the available preview area with a margin, using the model's rendered geometry, entity dimensions and all driveable part collision boxes. The rotation slider remains available. Large ships, wide wings and tall mechas no longer share the fixed zoom of ordinary NPC previews. Preview framing does not change the NPC's saved size or world collision.

Flan NPC name holograms are raised above the estimated model top, using the same geometry and collision bounds, plus the NPC's entity height. NPC size and renderer offsets are included; simple rendering uses the model's own scale. The usual name visibility, faction colour, title layout and text size remain controlled by Custom NPCs. This changes the label's rendering position, not the NPC's hitbox.

Search applies to the current list and clears when navigating between folders. Other Custom NPCs entity models remain available in the top-level list.

This changes how models are listed; existing NPCs and presets keep their model IDs. Skin selection, model settings and saving continue to use Custom NPCs.

Flan's Soldiers (Forge 1.20.1 and NeoForge 1.21.1)

The Flan Soldier folder dresses an NPC as a class of a Flan's team. It opens Content pack > Team > Class: the packs that define teams, a pack's teams in alphabetical order, then a team's classes in the order the team lists them. .. goes back one level and restores the parent list's scroll position, as in the other Flan folders.

Selecting a class changes the NPC's looks only:

  • The model becomes the default human, and the skin becomes the class's SkinOverride texture.
  • A skin in the old 2:1 layout (64x32 and its HD multiples) selects Custom NPCs' 64x32 human model instead, which draws that layout correctly.
  • A class without a skin, or whose texture is missing or is not a player skin, keeps the NPC's current skin.
  • The team and class are saved with the model, including in clones and presets. Choosing any other model, or Reset To NPC, forgets them.

The Apply class skin toggle, shown inside the folder and while a class is selected, is on by default. Turned off, selecting a class or applying its loadout keeps the NPC's current skin, and the human model that skin fits; the class is still recorded. The setting is the builder's own, lasts until the game is closed and is not saved with the NPC.

The NPC's inventory is never changed by selecting a class. While a class is selected, the preview wears the class loadout described below, so you can see what the NPC would carry. This is a preview only: until the loadout is applied, the NPC in the world keeps its own equipment, and after applying it the preview still shows the class loadout rather than later changes made by hand.

While a class is selected, the picker also shows an Apply class loadout button. Pressing it applies the class skin again, with the human model that fits it, in case the skin was changed since the class was chosen; a class without a usable skin leaves the current skin alone. The model and skin are saved to the server at once, as when the picker is closed. It then asks the server to clear the NPC's armour, weapon and inventory slots, then to equip:

Slot Item
Armour The class's piece for each slot, or the team's where the class names none, as for a player joining a round.
Main hand The first gun among the class's starting items that is fired from the hand, with its attachments and loaded with its default ammunition.
Off hand A shield, or a second gun only when it is the same weapon as the main-hand gun, for dual wielding. Whichever the class lists first.
Projectile The first ammunition the main-hand gun loads, so that it can reload. Without any, or without a gun, the first grenade or thrown weapon.
Inventory Every other starting item, in the order the class lists them: other guns and their ammunition, spare magazines, grenades, tools and food.

A deployable gun, such as a tripod machine gun, is never held: when a class lists one first, the NPC holds the next gun instead, and the deployable gun is carried in the inventory. A class with no other gun leaves the main hand empty.

A different second gun is never held in the off hand; it is carried in the inventory with its ammunition. The inventory is the nine slots Custom NPCs lists as the NPC's drops, so the NPC also drops these items when it dies, with the default chance. Items beyond the nine slots are left out. The button replaces whatever the armour, weapon and inventory slots held before, including their drop chances.

The server then runs all three equipment imports, so the NPC's Custom NPCs melee, ranged and resistance statistics match the new equipment. The request is refused unless the player is editing that NPC with the NPC wand in hand and holds the Custom NPCs npc.inventory and npc.stats permissions. The result is reported in chat. The button can be pressed again at any time, for example after emptying the NPC's inventory by hand.

For Forge 1.20.1 repository development runs in IntelliJ, regenerate the launch configurations with gradlew genIntellijRuns after updating the NPC module. The generated runs build all IntelliJ modules before launch, including the separate NPC module. A main-module-only build can leave stale NPC classes alongside an updated mixin configuration and fail with a missing mixin class. The launch arguments must include --mixin.config wolffsmodnpcs.mixins.json as well as the main mod's mixin configuration; otherwise the picker shows the original flat model list. NeoForge 1.21.1 loads the NPC mixin configuration from the module's neoforge.mods.toml, so its development runs need no extra launch argument.

⚠️ **GitHub.com Fallback** ⚠️