Skip to content

SnPets v1.25.0

Choose a tag to compare

@ValentinTarnovsky ValentinTarnovsky released this 10 Sep 22:35
· 11 commits to main since this release

Bedrock players can finally see the pets

If your network runs Geyser and Floodgate, your Bedrock players saw nothing where a pet should
be, while Java players saw the model perfectly. This release fixes that.

Why it happened

Two independent causes, one answer.

Every pet BODY this plugin draws is a Display entity: the head backend is an ITEM_DISPLAY, and a
model pet's bones ride an invisible ITEM_DISPLAY carrier. Geyser has no Bedrock definition for
ITEM_DISPLAY, so it discards the spawn in silence. The pet's name plate is a TEXT_DISPLAY,
which Geyser does translate, so what a Bedrock player actually received was the pet's name frozen
in mid-air at the spot it first appeared, with no pet under it and nothing moving it.

Separately, models are drawn through BetterModel's DummyTracker, and the Bedrock content bridge
only knows EntityTracker, so it never learns the pet exists at all.

What now happens

A Bedrock viewer is sent a substitute their client can actually render: an armor stand wearing the
pet's own head texture, following the pet by exactly the same movement arithmetic, with the
pet's name plate riding it.

Java players are completely unaffected. They receive the same packets they received before, byte
for byte. And on a server without Floodgate, nothing changes at all.

New bedrock: config band

It is added to your config.yml automatically on the first boot; your existing values are kept.

Key Default What it does
enabled true Off restores the previous behaviour exactly
scale 1.0 Multiplied by the pet's own model.scale, so pets/*.yml needs no changes
height-offset -0.7 Normally negative: an armor stand's head sits above its feet
small true A small stand; off roughly doubles the height, so double the offset too
invisible true Hides the stand's body, leaving only the head it wears
mount-label true Lets the pet's name plate ride the substitute

If a Bedrock player reports seeing nothing, flip invisible to false first: some Bedrock versions
hide an invisible entity's equipment along with its body, which would hide the very head the
substitute exists to show. Every key takes effect with /pets reload, no restart needed.

Notes

  • Floodgate is a new optional soft dependency. Without it every player counts as a Java client
    and this whole feature does nothing.
  • A Bedrock player sees the pet's head, not the animated model. There is no way to send a
    BetterModel model to a Bedrock client, which is the whole reason this exists.
  • The scale is applied through the minecraft:scale attribute, which only exists on clients 1.20.5
    and newer. Below that the substitute renders at its natural size.
  • Costs nothing when nobody is on Bedrock: the render path quick-exits on a single field read, and
    Floodgate is asked about a player exactly once, on their join, never from the animation tick.
  • No changes to commands, permissions, the database, pets/, lang/ or guis/. The developer API
    is untouched and API_VERSION stays 1.0.0.

Installation

Download the JAR below and place it in your plugins folder. Requires SnLib.jar.