Fix issue where doors would update twice when opening/closing them using the upper half

This commit is contained in:
onebeastchris 2024-07-06 15:45:06 +02:00
parent d6a8e6231e
commit 34d7069c09

View file

@ -37,9 +37,22 @@ public class DoorBlock extends Block {
@Override
public void updateBlock(GeyserSession session, BlockState state, Vector3i position) {
// Needed to check whether we must force the client to update the door state.
String double_block_half_state = state.getValue(Properties.DOUBLE_BLOCK_HALF);
if (double_block_half_state.equals("lower")) {
BlockState oldBlockState = session.getGeyser().getWorldManager().blockAt(session, position);
// If these are the same, it means that we already updated the lower door block (manually in the workaround below),
// and we do not need to update the block in the cache/on the client side using the super.updateBlock() method again.
// Otherwise, we send the door updates twice which will cause visual glitches on the client side
if (oldBlockState == state) {
return;
}
}
super.updateBlock(session, state, position);
if (state.getValue(Properties.DOUBLE_BLOCK_HALF).equals("upper")) {
if (double_block_half_state.equals("upper")) {
// Update the lower door block as Bedrock client doesn't like door to be closed from the top
// See https://github.com/GeyserMC/Geyser/issues/4358
Vector3i belowDoorPosition = position.sub(0, 1, 0);