Ascension Protocol
Configuration

Shadows Configuration

plugins/AscensionShadows/config.yml and shadow-archetypes.yml

Files

FilePurpose
config.ymlExtraction, summon, AI, regions, ModelEngine
shadow-archetypes.ymlPer-archetype stats, abilities, model-engine-id
leash-preferences.ymlPer-player leash distance (generated)

Debug (debug)

All debug flags default to false (production-safe). Enable selectively when troubleshooting.

KeyDescription
enabledMaster verbose logging
model-engine / summon / ai / animations / mounts / resource-packPer-subsystem logs

ModelEngine (modelengine)

KeyDescription
install-blueprintsCopy bundled .bbmodel to ModelEngine on enable
overwrite-blueprintsReplace existing blueprint files
reload-after-installRun /meg reload after install (default off)
debugVerbose ModelEngine logging
reapply-after-pack-loadRe-apply models when resource pack loads
pack-load.warning-delay-ticksWait after DOWNLOADED before stall warning (default 1800 = 90s)
pack-load.extended-poll-max-ticksPoll SUCCESSFULLY_LOADED for at least this long (default 1800; code also covers the warning window)
pack-load.auto-resend-on-stallLeave false — mid-apply resend restarts the client load loop

Required: ModelEngine plugin + merged resource pack (Core resource-pack.merge-modelengine-pack).

V2 blueprint layout

PathPurpose
modelengine/blueprints/v1/Archived legacy models
modelengine/blueprints/v2/custom/Ascension-built models
modelengine/blueprints/v2/downloaded/Imported pack models
modelengine/blueprints/v2/manifest.jsonActive install list

Per archetype: model-engine-id = shadow palette, wild-model-engine-id = *_wild palette (gate dungeons).

Archetype abilities (abilities)

KeyDescription
rideableAllow player mount (WASD to ride, right-click to dismount)
mount-flightFlying mount: walks on the ground, F/Space to take off, Space up, look down to dive, F to land
fire-breathMounted left-click breath (fires even at empty air) + AI breath at range in combat
mount-seat-y-offset / mount-seat-z-offsetRider seat offset
owner-heal-hearts-per-second / heal-radiusPassive aura heal

Dragon Monarch ships with mount-flight and fire-breath enabled.

Global mount tuning lives under abilities in config.yml:

KeyDefaultEffect
mount-fly-speed / mount-ground-speed0.45 / 0.22Blocks per tick while riding

The rider is re-seated onto the model's back each tick (mount-seat-y-offset / mount-seat-z-offset per archetype). The seat re-position keeps your camera rotation untouched, so mouse-look stays smooth.

Notable archetypes

IDRoleNotes
kamishMONARCH rideable flying dragonSolo-Leveling western dragon. Shadow = black scales / glowing purple horns + underbelly; wild = red scales. Has an apex "Inextinguishable Flame" breath — wider, longer, with Dragon's Fear (blindness + slow) and a blinding flame burst. Extracted from ENDER_DRAGON.
granite_sentinelEPIC tank golemSlow, high-HP melee bruiser. Shadow = obsidian stone with glowing purple runes; wild = granite grey with molten cracks. Extracted from IRON_GOLEM.

Both ship as wild + shadow blueprint pairs (ascension_kamish(_wild), ascension_granite_sentinel(_wild)) with the full animation set (idle, walk, attack, summon, recall, death — dragon also fly/ride/breathfire).

Display showcase (display)

KeyDescription
interact-speech-formatNPC speech wrapper for interact messages
interact-presetsReusable click/proximity presets (--interact <id>)

Showcase patrol and animation state is stored on the entity (PDC), not in YAML.

Staff: /shadows admin display grid both 4 (ascension.shadow.display.grid). Repo: docs/MODELENGINE_SHADOWS.md, python tools/v2_shadow_counterparts.py.

Extraction (extraction)

KeyDescription
min-rankMinimum hunter rank (default C)
base-successBase extraction chance
rank-success-bonus-per-tierBonus per rank tier
boss-bonus / boss-power-multiplierBoss kill modifiers
offer-timeout-secondsPending offer duration
wild-kill-enabledExtraction from gate/dungeon wild mobs
rare-archetypesSpecial rolls (e.g. Void Wyvern / Kaisel)

Summon & army (summon)

KeyDescription
max-active-summonsMax shadows out at once
default-behavior-modeSQUAD, FOLLOW, FREE_ROAM, etc.
max-leash-blocksDefault roam distance
leash-permissionsMap blocks → permission node
mana-cost-per-tierMana per summon by rank tier
nameplateFloating name format + height
particles.enabledMaster switch for summon/dismiss/hit VFX
particles.ambient-auraContinuous aura while idle/following (default false)
ai.*Pathing, combat, squad formation, LOD

Nameplate (summon.nameplate)

Floating label above summoned shadows. Uses a TextDisplay teleported above the mob each AI tick (not a passenger), so it stays with the shadow as it moves. ModelEngine hides the base entity nameplate, so this label is the visible tag.

KeyDefaultEffect
enabledtrueShow floating labels
formatmulti-linePlaceholders: {name} {owner} {rank} {hp} {maxhp} {health_bar} — use \n for a second line
height-scale1.0Multiplier applied to the computed model height
height-offset0.45Clear space (blocks) above the model top
model-heightsmapExact model-top height per model-engine-id (overrides the auto value) — e.g. ascension_void_dragon: 4.6

Default format shows shadow name + owner on line 1, and rank + HP bar on line 2. Applies to both summoned shadows and showcase (display) mobs (showcase uses its own label path).

Tall ModelEngine customs can float their name too low (the offset is based on the vanilla hitbox, not the model). Tune height under the keys above.

Storage capacity comes from AscensionCore rank shadow-capacity.

Sounds (sounds)

Vanilla event SFX for summoned shadows and wild dungeon mobs, keyed by archetype particle-profile (orc, wolf, drake, void, crystal, …). Entities are silent; these replace attack / hurt / death / summon chatter via ShadowSoundService.

KeyDefaultEffect
enabledtrueMaster switch
volume0.7Base volume
pitch-variance0.15Random pitch jitter

Wild mobs (wild-mobs)

Dungeon/gate mobs with custom AI. Archetypes and models in shadow-archetypes.yml (wild-model-engine-id).

KeyDefaultNotes
cancel-player-knockbacktrueCancels vanilla + damage knockback when wild mobs hit players (custom hit feedback also skips shove)
entity-collidablefalseWild mobs do not shove players via collision boxes
min-health24HP floor for low-base entities

Regions (regions)

WorldGuard/Towny integration — where shadows can fight or extract.

To block summoning in a WorldGuard region, set the custom flag to deny:

/rg flag <region> ascension-shadows deny

With worldguard.unset-means: default and default-allow: true, a region with the flag unset allows shadows for everyone — the flag must be deny to block.

Shadow, wild and display mobs are spawned directly by the plugin and are governed only by the ascension-shadows flag — not by WorldGuard's generic mob-spawning/deny-spawn flags. A spawn-protected area (e.g. mob-spawning deny at server spawn) will no longer silently swallow shadow summons; use the ascension-shadows deny flag if you want shadows blocked there.

Bypass: operators, ascension.admin, and ascension.shadow.region.bypass skip region checks entirely. When such staff summon inside a region that would otherwise block shadows, they still summon but receive regions.messages.summon-bypass-notice so the bypass isn't mistaken for the region not working. Test the actual block with a non-op account (or /deop).

Messages (regions.messages)

KeyShown when
summon-deniedNon-staff summons where shadows are denied
summon-denied-worldguardDenied by a WorldGuard region
summon-denied-townyDenied inside a Towny town
enter-deniedWalking into a denied region (army recalled)
enter-allowedLeaving back into an allowed area
summon-bypass-noticeStaff summon inside a region that would block others

Chat (chat)

KeyDescription
clickable-army-listClickable /shadows list in chat
clickable-extract-offerClickable extraction prompts

Naming (naming)

min-length, max-length, blocked-words, use-builtin-filter for shadow rename/bind.

Bond levels (bond-levels)

Every shadow carries its own bond level (1 → max-level). Levels are earned automatically while the shadow is summoned — there are no points to spend. See Bond levels for the player-facing explanation and the growth formula.

KeyDefaultMeaning
max-level100Bond cap. A capped shadow earns no further XP.
xp-base50First term of the XP curve.
xp-per-level22XP to reach the next level is xp-base + 22 × current level (level 1→2 = 72 XP; 99→100 = 2,228 XP; 1→100 = 113,850 XP total).
strength-per-level0.008Growth budget per level. At the cap a shadow has unlocked (max-level - 1) × 0.008 = 79.2%, which is then multiplied by the archetype's growth values.
default-movement-speed0.27Fallback base speed for archetypes whose growth.base-movement-speed is unset.
xp-per-kill25Bond XP per normal mob kill.
xp-boss-kill120Bond XP for a kill on any mob with more than 100 max health.
share-xp-radius24Blocks. Summoned shadows farther than this from the victim earn nothing; every shadow inside it earns the full amount (XP is not split).
level-up-messagetrueChat message + live stat/nameplate refresh on level-up.

Per-archetype scaling lives in shadow-archetypes.ymlgrowth (health-growth, damage-growth, base-movement-speed, movement-speed-per-level). Those multipliers decide how much a bond level is actually worth for that archetype.

VFX catalog (vfx)

Data-driven summon, combat, and ability particles for shadows, played through the shared VFX engine (gated by Core vfx.enabled / vfx.density and summon.particles.enabled). Element dust colors come from the suite palette by particleProfile (so a void shadow, a void weapon, and a void gate match). Effect ids: shadow.aura.<profile> / shadow.hit.<profile> (per-profile particle sets), shadow.aura.base / shadow.hit.base, shadow.rise, shadow.dissolve, shadow.exchange.* (Shadow Exchange swap), and shadow.fire_breath.cone / cone_apex / apex_burst (dragon breath). Layer format is the same as documented in the gates configuration VFX section.

On this page