SnPets v1.25.0
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:scaleattribute, 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/orguis/. The developer API
is untouched andAPI_VERSIONstays1.0.0.
Installation
Download the JAR below and place it in your plugins folder. Requires SnLib.jar.