GeyserMC/Geyser

Dragon Head when powered doesn't animate

Chew opened this issue · 6 comments

Chew commented

Describe the bug
When a dragon head is powered, it doesn't animate

To Reproduce

  1. Place Dragon Head
  2. Power it
  3. :(

Expected behavior
Well, it SHOULD. :(

Screenshots / Videos
Imagine a dragon head moving but as a PNG.

Server Version
This server is running Paper version git-Paper-345 (MC: 1.16.4) (Implementing API version 1.16.4-R0.1-SNAPSHOT)

Geyser Version
77de991...master

Minecraft: Bedrock Edition Version
1.16.201

Additional Context
You know

I want to add that I have found an arch-nemesis of Bedrock-to-Java crossplay that is even worse than lecterns. At least lecterns eventually give you the information - the Java client assumes all this information.

And I checked - THE SERVER DOES THESE CALCULATIONS TOO!!!!! AND THEY DON'T SEND THEM TO US!!! (this is disabled in Paper, I checked that too) GAAAAAA

Chew commented

Let's check out the table

|   Status   | Minor Issue |  Major Issue  |
|------------+-------------+---------------|
| Minor Work | Easy patch  | Ideal         |
| Major Work | We are here | As you expect |

For any poor soul that wants to tackle this, here's what you need to know:

Bedrock needs this packet sent in order to make the mouth move:

BlockEntityDataPacket(blockPosition=(101, 66, 130), data={
  "MouthMoving": 1b,
  "MouthTickCount": 1i,
  "Rotation": 0.0f,
  "SkullType": 5b,
  "id": "Skull",
  "isMovable": 1b,
  "x": 101i,
  "y": 66i,
  "z": 130i
})

Notice the MouthMoving and MouthTick parts, if you will. Those need to be set - I'm unsure at this time if MouthTick needs to count up but MouthMoving definitely needs to have a byte value of 1.

Java Edition clients tick the block every tick (lovely for performance, honestly) to see if the dragon head is powered on any side. If true, the mouth moves. If false, it doesn't move. There is no serverside communication here - this is done on the client.

Feel free to contact me if you wish to partake in this for some odd reason.

so what needs to be done is have geyser check if a dragon head block is being powered by redstone, then send them that packet with the coords replaced by the coords of the head?

Yes.

Resolved by 13339f1