6 releases, newest first.
bm: modelsA head with a BetterModel model (bm:<id>) was invisible to Bedrock players. The cause was the
render primitive, not the model: Nexo's Scaffolding addon bridges BetterModel content to Bedrock
through EntityTracker only, and this plugin drew its engine heads with a DummyTracker, which
that bridge never sees. bm: heads are now bound to a real carrier entity, which puts them inside
the bridge. Verified end to end on a real Bedrock client.
An EntityTracker costs a real server entity (ticking, persistence, entity count), and that cost is
per entity. It is worth it here because these are a handful of static decorations: heads run
with rotation-speed, bounce-speed and bounce-height at 0, so the carrier never moves and never
sends a movement packet.
Do not carry this change over to SnPets, SnCompanions or EdToolsMinions. Those are hundreds of
moving entities, several per player, where the arithmetic does not work; they keep the
substitute-render approach. This note exists for whoever finds EntityTracker here later and assumes
it is the fleet-wide pattern.
bm: head is made of nowOne invisible marker armor stand carrier per head: no gravity, silent, invulnerable,
non-collidable, never saved to the world, tagged in persistent data and with the scoreboard tag
snrotatinheads. It is reaped by the existing orphan purge, and a carrier removed by an entity
cleaner is rebuilt within a second.
view-range on a bm: head is now capped by vanilla entity tracking. A value above
spigot.yml entity-tracking-range.other (64 by default) has no effect. The shipped default of 48
is unaffected. It is also now the client-side Display cutoff, so it scales with each player's
Entity Distance video setting - the same way plain heads have always behaved.bm: head only exists while its chunk
is loaded (it already worked this way - heads spawn and despawn on chunk load/unload), and each one
adds one invisible entity to entity counts.Heads without a model, meg: (ModelEngine) heads, holograms, click actions, sizes and animations are
unchanged.
/rh animation set <id> <name|none> (looping base), add <id> <seconds> <name> (minimum 1s), remove <id> <index>, list <id>, clear <id>. The old /rh animation <id> <name> form is now animation set.timed-animations: [{every, play}]), fire from the existing once-a-second engine pass of the single shared task (no new timers) and pause while the head is despawned./rh hologram offset <id> <blocks> sets how high above the head its label sits (negative sits it lower) and /rh hologram spacing <id> <blocks> sets the distance between the label lines. Both apply live and are stored per head in heads.yml (hologram-offset, hologram-line-height).config.yml: hologram.y-offset is now the default for NEW heads (existing heads keep working exactly as before) and hologram.line-height (default 0.25, the DecentHolograms default) joins it./rh info shows the offset and the spacing./rh model <id> meg:<model> (ModelEngine R4) or /rh model <id> bm:<model> (BetterModel) renders a Blockbench model with bones and animations in place of the skull. The head still spins, bounces, carries its label and answers clicks (the plugin's own hitbox stays the click surface)./rh animation <id> <name|none> picks the animation the engine model plays (defaults.animation: idle in config.yml, stored per head in heads.yml); tab completion lists the models of the installed engines and the animations of the models in use.size scales the engine model, viewrange is its render radius, and the click hitbox grows with the model height.model command refuses an engine model whose engine is absent or does not know the id./rh model <id> <material[:custom-model-data|:item-model key]> renders any item (a resource-pack model) instead of the skull; player_head goes back to the textured head./rh model <id> hand reads the material and the model selector (item_model on 1.21.2+, otherwise custom-model-data) off the item in your main hand, so ItemsAdder / Nexo / any resource-pack item becomes a head without typing a selector./rh transform <id> <mode> sets the item display context per head (ground stays the default for every existing head; fixed, head, gui, none, ... for models made for another pivot).defaults.model and defaults.transform in config.yml; model and transform rows in heads.yml (a missing key is the configured default, an unparsable value falls back with a console WARN)./rh info shows the model and the display context; /rh texture tells you when the texture is hidden by a non-skull model.snrotatinheads.admin.model and snrotatinheads.admin.transform (children of snrotatinheads.admin).SnRotatinHeads 2.0.0 - decorative rotating, bouncing player heads for lobbies and hubs, built on SnLib.
What it does
Install