diff --git a/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/entity/player/input/BedrockBlockActions.java b/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/entity/player/input/BedrockBlockActions.java index 426e7eef34..70967ae02e 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/entity/player/input/BedrockBlockActions.java +++ b/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/entity/player/input/BedrockBlockActions.java @@ -95,8 +95,6 @@ private static void handle(GeyserSession session, PlayerBlockActionData blockAct // The Bedrock client won't send a new start_break packet, but just continue breaking blocks if (!vector.equals(session.getBlockBreakPosition())) { - GeyserImpl.getInstance().getLogger().error("Invalid block break position! Expected " + session.getBlockBreakPosition() + ", got " + vector); - // Start breaking new block startBlockBreak(session, vector, blockFace); break; @@ -233,7 +231,8 @@ private static void startBlockBreak(GeyserSession session, Vector3i vector, int vector, direction, session.getWorldCache().nextPredictionSequence()); session.sendDownstreamGamePacket(startBreakingPacket); - spawnBlockBreakParticles(session, direction, vector, BlockState.of(blockState)); + // TODO test + //spawnBlockBreakParticles(session, direction, vector, BlockState.of(blockState)); } private static void breakBlock(GeyserSession session, Vector3i vector, int blockFace) { @@ -265,6 +264,12 @@ private static void breakBlock(GeyserSession session, Vector3i vector, int block blockState = Block.JAVA_AIR_ID; } + LevelEventPacket breakingPacket = new LevelEventPacket(); + breakingPacket.setType(LevelEvent.BLOCK_STOP_BREAK); + breakingPacket.setPosition(vector.toFloat()); + breakingPacket.setData(0); + session.sendUpstreamPacket(breakingPacket); + LevelEventPacket blockBreakPacket = new LevelEventPacket(); blockBreakPacket.setType(LevelEvent.PARTICLE_DESTROY_BLOCK); blockBreakPacket.setPosition(vector.toFloat()); diff --git a/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/entity/player/input/BedrockPlayerAuthInputTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/entity/player/input/BedrockPlayerAuthInputTranslator.java index 96b7796ab4..38e39324df 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/entity/player/input/BedrockPlayerAuthInputTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/entity/player/input/BedrockPlayerAuthInputTranslator.java @@ -59,6 +59,7 @@ import org.geysermc.mcprotocollib.protocol.packet.ingame.serverbound.player.ServerboundPlayerCommandPacket; import org.geysermc.mcprotocollib.protocol.packet.ingame.serverbound.player.ServerboundSwingPacket; +import java.util.List; import java.util.Set; @Translator(packet = PlayerAuthInputPacket.class) @@ -79,11 +80,7 @@ public void translate(GeyserSession session, PlayerAuthInputPacket packet) { for (PlayerAuthInputData input : inputData) { switch (input) { case PERFORM_ITEM_INTERACTION -> processItemUseTransaction(session, packet.getItemUseTransaction()); - case PERFORM_ITEM_STACK_REQUEST -> { - ItemStackResponsePacket responsePacket = new ItemStackResponsePacket(); - responsePacket.getEntries().add(session.getInventoryTranslator().translateRequest(session, session.getPlayerInventory(), packet.getItemStackRequest())); - session.sendUpstreamPacket(responsePacket); - } + case PERFORM_ITEM_STACK_REQUEST -> session.getInventoryTranslator().translateRequests(session, session.getPlayerInventory(), List.of(packet.getItemStackRequest())); case PERFORM_BLOCK_ACTIONS -> BedrockBlockActions.translate(session, packet.getPlayerActions()); case START_SPRINTING -> { if (!entity.getFlag(EntityFlag.SWIMMING)) {