BTCMobs
BTCMobs is a Soon extension. It is not released, it has no download and no version number yet, and entries or fields may change before publication. This page documents the current development build for reference. It is not the old "BTC Mob" plugin: the mob engine now lives inside the extension itself, there is no separate plugin to install.
Overview

BTCMobs lets you build custom mobs and interactive NPCs entirely from the TypeWriter web panel. A mob template describes one creature: its base Minecraft entity, level, health, armor, skills, drops, faction, optional 3D model and optional reproduction. Spawners and natural spawns decide where and when templates appear in the world. Skills and drop tables define what the mob does and what it leaves behind.
Everything the mobs do is exposed back to TypeWriter. Events fire when a mob spawns, takes damage, casts a skill or dies. Facts and variables report health, level, count or distance. Actions spawn, despawn or make mobs cast skills. This lets quests, dialogues and cinematics react to a fight, or start one.
The same extension also provides an NPC side: a mob template can be shown as a client-side NPC, with dialogue interactions, quest objectives, camera cinematics (including cameras attached to a model bone), per-player bone visibility and ModelEngine or BetterModel animation control. The extension targets the BTC build of TypeWriter (Paper/Folia).
Features
- Mob templates — one
btc_mob_templateentry per creature: entity type, level, health, attack damage, armor, skills, drops, faction, threat table, model and animations. - Spawners — region-based spawners with a spawn cap, spawn cadence and warm-up that can be driven by facts, so each player can see a different pace.
- Natural spawn replacement — swap vanilla creature spawns for BTC mobs, rule by rule, by world, biome and probability.
- Skills — a skill is an ordered list of TypeWriter actions, or a script line. Templates attach skills to triggers such as spawn, attack, damage, death or a repeating timer.
- Drop tables and items — vanilla materials, custom items, XP and reusable tables, with chance and quantity that scale with the mob level.
- Quest hooks — events, facts, variables and a skill objective so stories can react to mobs and fights.
- NPCs — template-based client-side NPCs with dialogue, interaction, look-at and camera behaviour.
- Cinematics — spawn a mob, cast a skill, focus on an NPC or ride a model bone during a TypeWriter cinematic.
- Persistence — skill cooldowns, counters, auras, threat tables and boss bars survive a restart when a storage artifact is configured.
- MythicMobs import — an operator command converts a MythicMobs pack into BTCMobs pages.
Installation
BTCMobs is in development and has no public download. The notes below describe how the development build is wired.
- Run the BTC build of TypeWriter (BTC Core, Paper or Folia) with the Quest and RoadNetwork extensions, which the build declares as dependencies.
- Put the BTCMobs JAR in
plugins/Typewriter/extensions/and restart the server. It bundles its own mob engine, so no separate BTCMobs plugin is needed. - Install the optional integrations you want. The extension detects them at runtime: ModelEngine or BetterModel for 3D models, MiniPlaceholders to expose placeholders, PacketEvents, Vault, DecentHolograms and WorldGuard.
- To open the mob catalogue menu, the BTC GUI extension must be installed.
- In the web panel, create a
btcmobs_storageartifact and reference it from abtcmobs_configentry (see below) so gameplay state is saved.
Getting started
This walkthrough creates a zombie boss, spawns it in an arena and reacts to its death.
- In the TypeWriter web panel, open a manifest page. Add a BTCMobs Storage artifact, then a BTCMobs Global Configuration entry and set
storageto that artifact. - Open a static page and add a Native BTC mob template. Give it an
idyou will reuse (for examplecrypt_warden). SetentityTypetoZOMBIE,displayto the name players see, thenlevel,maxHealth,attackDamageandarmor. - Add a Native BTC mob drop table and list its
drops, one declaration per line, for exampleDIAMOND 1 0.25(material, amount, chance) orexp 20to40. Reference the table by its id in the templatedropslist. - Add a Native BTC mob skill and fill
actionswith the TypeWriter actions it runs, in order. In the template, add the skill id toskills, for examplewarden_slam~onTimer:100to cast it every 100 ticks. - Add a BTCMobs Spawner. Set
mobTypeto the template id (not its display name),world, the twocorner1andcorner2of a region,defaultMaxMobsanddefaultCooldown(in ticks). - Add an On BTCMob die event with
mobNameset to the template id, and link itstriggersto a dialogue, reward or fact modifier. - Publish the pages, walk within
defaultActivationRange(24 blocks by default) of the region centre, and the mob appears. Use/tw btcmobs spawners force <id>to test without waiting.
/tw btcmobs spawn <template> <level> <amount> spawns a template next to you with the level you choose. The command suggests the loaded template ids.
How it works
A template is only a description. A live mob is created when a spawner, a natural spawn, a Spawn a mob action or the spawn command asks for one. From then on the mob runs the skills attached to its triggers and rolls its drop declarations when it dies. Every step also raises a TypeWriter event, which is how quests and dialogues follow the fight.
Skills and triggers
Entries in a template's skills list are written skillId or skillId~trigger. The id is the id (or name) of a btc_mob_skill entry. The trigger says when the mob runs it: onSpawn, onAttack, onDamaged, onDeath, onKill, onDespawn, onInteract, onTeleport, onExplode, onRanged, onProjectile, or onTimer:<ticks> for a repeating skill (onTimer:5s is also accepted, in seconds). A skill with no trigger runs on every trigger the mob raises, so always add one. conditions filter every skill line and targeters choose the targets they share.
Drop declarations
Each line of a drop table, or of a template drops list, is one of:
- a vanilla material with optional amount and chance, for example
BONE 2 0.5; - the id or name of a
btc_mob_itementry, with optional amount and chance; exp 10orexp 10to20for experience;btc:<item_id> [amount or range] [chance] [+n/m]for an item of the BTC catalogue. Without the+n/mtoken the quantity grows with the mob level, from x1 at level 1 to x6 at level 100;- the id of another drop table, which is expanded in place.
Unknown declarations are logged as warnings and skipped.
NPCs
An NPC is a template shown to players as a client-side entity. A BtcMob NPC definition names the template in mobType and sets the display name, its offset and whether it ticks. A BtcMob NPC instance places it with spawnLocation, an optional activity, a group and extra data. NPC data entries change how the model looks: bone visibility per player, attachments that swap a bone for one from another model, ModelEngine stances for day and night, and walking speed.
Commands
All commands live under /tw btcmobs. The short aliases /tw btc and /tw btcmobsadmin run the same tree. Every node has a permission of the form btcmobs.command.<node> (see below).
| Command | Description |
|---|---|
/tw btcmobs mobs [list] | List the loaded mob templates. |
/tw btcmobs mobs listactive | List the mobs currently alive. |
/tw btcmobs spawn <template> [level] [amount] | Spawn a template next to you (amount 1 to 64). summon and mobs spawn are equivalent. |
/tw btcmobs mobs kill <template> [radius] | Kill mobs of a template around you (default radius 48). |
/tw btcmobs mobs killall [radius] | Kill every BTC mob around you (default radius 48). |
/tw btcmobs mobs info | Show information about the mob you are looking at. |
/tw btcmobs skills [list] | List the loaded skills. |
/tw btcmobs cast <skill> | Cast a skill from yourself (skills cast, test cast and profile cast are equivalent). |
/tw btcmobs spawners [list] | List the spawner entries. |
/tw btcmobs spawners info <id> | Show one spawner. |
/tw btcmobs spawners force <id> [amount] | Force a spawn, ignoring conditions and caps. |
/tw btcmobs spawners reload | Reload the native entries. |
/tw btcmobs reload | Reload the native entries. |
/tw btcmobs menu | Open the mob catalogue menu (first 45 templates, alphabetical). |
/tw btcmobs items list and get <item> [amount] | List or take an item of the catalogue. |
/tw btcmobs items give <player> <item> [amount] | Give a catalogue item to a player. |
/tw btcmobs signal <uuid> <signal> | Send a signal to an active mob. |
/tw btcmobs test mechanic, condition, targeter <line> | Run one script line as a test. |
/tw btcmobs test on <uuid or nearest> <line> | Run a script line on a specific active mob. |
/tw btcmobs import mythic [path] | Convert a MythicMobs pack into BTCMobs pages (default folder import/BtcMob in the TypeWriter data folder). migrate mythic is equivalent. |
/tw btcmobs audit, coverage, registrydump, variables, placeholders | Diagnostics about loaded templates, skills, spawners and registries. |
/tw btcmobs debug, version, modeldiag | Runtime diagnostics, version and BetterModel state of nearby mobs. |
Permissions
| Permission | Grants |
|---|---|
btcmobs.command.main | The /tw btcmobs root and its help. Granted to everyone by default. |
btcmobs.command.version | version and v. Granted to everyone by default. |
btcmobs.command.mobs, .mobs.spawn, .mobs.kill, .mobs.killall, .mobs.info, .mobs.listactive, .mobs.stats | The mobs and spawn commands. |
btcmobs.command.skills, .skills.cast | Listing and casting skills. |
btcmobs.command.spawners, .spawners.list, .spawners.info, .spawners.force, .spawners.reload | The spawners commands. |
btcmobs.command.items, .items.list, .items.get, .items.give | The items commands. |
btcmobs.command.menu, .menu.open | The catalogue menu. |
btcmobs.command.import, .migrate, .migrate.mythic, btcmobs.import | The MythicMobs import. |
btcmobs.command.test, .test.mechanic, .test.condition, .test.targeter, .test.cast | The test commands. |
btcmobs.command.audit, .variables, .debug, .modeldiag, .signal, .reload, .profile | The matching diagnostic commands (.profile is the profile cast alias). |
btcmobs.command.admin, btcmobs.admin | Administrative root (/tw btcmobsadmin). |
btcmobs.command.*, btcmobs.* | All of the above. |
Every permission except btcmobs.command.main and btcmobs.command.version defaults to operators only. The modeldiag command checks btcmobs.command.modeldiag, which the extension registers and grants to operators by default.
Placeholders
Placeholders are published to MiniPlaceholders only; PlaceholderAPI is not used to publish them. The syntax is <name:argument:argument>.
| Placeholder | Returns |
|---|---|
<btcmobs_caster> and <btcmobs_caster:field> | The template id, or a field of the mob bound to the player: name, type, level, hp, maxhp, percent, uuid. |
<btcmobs_looking> and <btcmobs_looking:field> | The same fields for the BTC mob the player is looking at (up to the look range), empty when there is none. |
<btcmobs_var:name> | The value of a global BTCMobs variable. |
<btcmobsdamage_top:BOSS:POSITION:field> | The player at a rank of a boss damage ranking. Fields: name, damage, raw_damage, percent, uuid. |
<btcmobsdamage_self:BOSS:field> | The viewing player's own ranking. Fields: damage, raw_damage, percent, position. |
<btcmobsdamage_participants:BOSS>, _total, _max_health, _last_update | Totals for a boss damage ranking. |
Entries
57 entries, generated from the extension source.
Actions7
- BTC Mob Script ActionNative BTC mob script action
- Btcmob NPC HideHide a BtcMob NPC
- Btcmob NPC ShowShow a BtcMob NPC
- Despawn Btcmobs MobDespawn a mob from BTCMobs
- Execute Btcmobs SkillExecutes a BTCMobs skill
- Open BTC Mob MenuOpen the native BTC mob catalogue
- Spawn Btcmobs MobSpawn a mob from BTCMobs
Events9
- Btcmob NPC HitWhen a BtcMob NPC is hit or hits a player
- Btcmob NPC InteractWhen the player clicks on a BtcMob NPC
- Btcmobs Interact EventBTCMob Interact Event
- Btcmobs Kill Player EventBTCMob Kill Player Event
- On Btcmob DamageWhen a BTCMob takes damage.
- On Btcmob DespawnWhen a BTCMob despawns without being killed by a player.
- On Btcmob DieWhen a player kill a BTCMob.
- On Btcmob SkillWhen a BTCMob casts a skill.
- On Btcmob SpawnWhen a BTCMob spawns in the world.
Objectives2
- Btcmob Skill ObjectiveBtcMob Skill Objective
- Interact Btcmob NPC ObjectiveInteract with a BtcMob NPC
Facts9
- Btcmob Count FactCount the number of active BTCMobs of the specified type
- Btcmob Health Percentage FactReturns the current health percentage of the nearest BTCMob of the specified type
- Btcmob Level FactReturns the level of the nearest BTCMob of the specified type
- Btcmob NPC Animation Playing FactReturns 1 when the specified ModelEngine animation is playing
- Btcmob NPC Distance FactReturns the distance between the player and the BtcMobs NPC
- Btcmob NPC Health Percentage FactReturns the NPC's current health percentage
- Btcmob NPC Presence FactReturns 1 when the BtcMobs NPC is currently spawned
- Btcmob NPC Threat Table Size FactReturns the size of the BtcMobs threat table
- Btcmob NPC Visibility FactReturns 1 if the player can currently see the BtcMobs NPC
Cinematics5
- Btcmob CinematicSpawn a BTCMob during a cinematic
- Btcmob NPC Bone Camera CinematicAttach the cinematic camera to a bone of a BtcMob NPC's model
- Btcmob NPC Camera CinematicFocus on a BtcMob NPC during a cinematic
- Btcmob NPC Skill CinematicTrigger a BtcMob NPC Skill
- Btcmobs Skill CinematicTrigger a BTCMob Skill during a cinematic
Entities2
- Btcmob NPC DefinitionA BtcMob that can be used as an NPC
- Btcmob NPC InstanceAn instance of a BtcMob NPC
Entity data4
- Btcmob NPC AttachmentReplace a bone of a BtcMob NPC model with one from another model
- Btcmob NPC Bone VisibilityControl BtcMob NPC bone visibility with criteria
- Modelengine Stance DataModelEngine stance configuration for day/night animations
- Mythicmob Speed DataChange the walking speed of a BtcMob
Interaction bounds3
- Btcmob NPC Camera BoundA camera bound that focuses on a BtcMob NPC with custom focus offset
- Btcmob NPC Look at Interaction BoundAn interaction which forces the player to look at a BtcMob NPC
- Mythicmob Look at Interaction BoundAn interaction which forces the player to look at the nearest BtcMob of a specific type
Variables8
- Btcmob NPC Active Animations VariableReturns the active ModelEngine animations for the BtcMobs NPC
- Btcmob NPC Faction VariableReturns the BtcMobs NPC faction
- Btcmob NPC Health Percentage VariableReturns the current health percentage of the BtcMobs NPC
- Btcmob NPC Health VariableReturns the current health of the BtcMobs NPC
- Btcmob NPC Level VariableReturns the BtcMobs NPC level
- Btcmob NPC Max Health VariableReturns the maximum health of the BtcMobs NPC
- Btcmob NPC Power VariableReturns the BtcMobs NPC power
- Btcmob NPC Stance VariableReturns the current stance applied to the BtcMobs NPC
Artifacts1
- Btcmobs StorageBTCMobs Storage Artifact
Manifests1
- Btcmobs ConfigBTCMobs Global Configuration
Definitions6
- BTC Mob Drop TableNative BTC mob drop table
- BTC Mob ItemNative BTC mob item
- BTC Mob SkillNative BTC mob skill
- BTC Mob TemplateNative BTC mob template
- BTC Natural SpawnBTCMobs Natural Spawn Replacement
- BTC SpawnerBTCMobs Spawner with Corner System
Troubleshooting
The spawner does nothing and the log says "references unknown mob template". mobType must be the id of a btc_mob_template, not the name shown in the editor. Copy the id from the template entry. The same rule applies to btc_natural_spawn, the spawn and despawn actions, and NPC definitions.
The spawner never reaches its cap, or stops at 1. A region whose two corners are the same point caps defaultMaxMobs at 1. The cap counts mobs owned by that spawner, wherever they are. The spawner only works while a player is within defaultActivationRange of the centre of a region.
A spawner does nothing for some players. For each player near the region, the spawner checks the world, then conditionLines, then criteria, and all must pass before the region, cooldown and spawn are looked at. A player who fails criteria is skipped (a diagnostic line "criteria did not match" is logged once per player). criteria never removes a mob that has already spawned. The ...Fact fields (maxMobsFact, mobsPerSpawnFact and the others) still override the numeric defaults.
Natural spawn replacement never triggers. The entry only replaces spawns that the server already produces (natural, chunk generation or default). If the world's spawn-limits in paper-world-defaults.yml are 0, vanilla creatures never spawn and nothing is replaced. The first matching rule wins, and maxNearby set to 0 means no cap, not zero mobs.
A mob plays Attack or Death animations in a loop, or does not walk. modelAnimations only plays idle-type animations in a loop when a model is attached; attack and death names put there are ignored. One-shot animations are set in the template modelLifecycle (spawn, attack, hurt, death) and are played at the matching moment; a death animation plays to the end before the model disappears. A name missing from the model is logged once per template and that moment stays silent. Walk animations are not driven by mobs yet, only on the NPC side.
A skill or drop is silently missing. Check the server log: unknown drop declarations, unknown items and invalid chances are logged as warnings and skipped. A skills entry whose id does not match a btc_mob_skill entry is logged when the mob casts.
On BTCMob despawn does not fire. The event fires when a tracked mob leaves the world without dying (natural despawn, removal by a plugin, falling out of the world) and a player is within radius of it. It does not fire when the mob dies (use On BTCMob die), when its chunk only unloads (the mob is adopted again on reload), or when you remove it with the Despawn action or /tw btcmobs mobs kill. An empty mobName matches every mob; the same holds for the spawn, die, damage and interact events.
Related extensions
- BetterModel — BetterModel is one of the two model backends (
modelProvider) BTCMobs can drive for mob and NPC models.