From ba4e0cf5b970fa93e45d19219fc1ed5b465a88ee Mon Sep 17 00:00:00 2001 From: Camotoy <20743703+Camotoy@users.noreply.github.com> Date: Wed, 14 Jul 2021 09:33:34 -0400 Subject: [PATCH] Fix scaffolding and auto crafting Fixes #2381 --- connector/pom.xml | 2 +- .../translators/collision/CollisionManager.java | 17 ++++++++++------- .../inventory/InventoryTranslator.java | 1 + 3 files changed, 12 insertions(+), 8 deletions(-) diff --git a/connector/pom.xml b/connector/pom.xml index 4c8391766..91b5606b3 100644 --- a/connector/pom.xml +++ b/connector/pom.xml @@ -58,7 +58,7 @@ com.github.CloudburstMC.Protocol bedrock-v448 - ddfa38b + 690a545d compile diff --git a/connector/src/main/java/org/geysermc/connector/network/translators/collision/CollisionManager.java b/connector/src/main/java/org/geysermc/connector/network/translators/collision/CollisionManager.java index ceb528650..e59c33520 100644 --- a/connector/src/main/java/org/geysermc/connector/network/translators/collision/CollisionManager.java +++ b/connector/src/main/java/org/geysermc/connector/network/translators/collision/CollisionManager.java @@ -33,6 +33,7 @@ import com.nukkitx.protocol.bedrock.data.entity.EntityFlag; import com.nukkitx.protocol.bedrock.data.entity.EntityFlags; import com.nukkitx.protocol.bedrock.packet.MovePlayerPacket; import com.nukkitx.protocol.bedrock.packet.SetEntityDataPacket; +import com.nukkitx.protocol.bedrock.v448.Bedrock_v448; import lombok.Getter; import lombok.Setter; import org.geysermc.connector.entity.player.PlayerEntity; @@ -290,14 +291,16 @@ public class CollisionManager { boolean flagsChanged; boolean isSneakingWithScaffolding = (touchingScaffolding || onScaffolding) && session.isSneaking(); - flagsChanged = flags.getFlag(EntityFlag.FALL_THROUGH_SCAFFOLDING) != isSneakingWithScaffolding; - flagsChanged |= flags.getFlag(EntityFlag.OVER_SCAFFOLDING) != isSneakingWithScaffolding; + if (session.getUpstream().getProtocolVersion() < Bedrock_v448.V448_CODEC.getProtocolVersion()) { + // Now no longer sent with BDS as of 1.17.10 + flagsChanged = flags.setFlag(EntityFlag.FALL_THROUGH_SCAFFOLDING, isSneakingWithScaffolding); + } else { + flagsChanged = flags.setFlag(EntityFlag.OVER_DESCENDABLE_BLOCK, onScaffolding); + flagsChanged |= flags.setFlag(EntityFlag.IN_ASCENDABLE_BLOCK, touchingScaffolding); + } + flagsChanged |= flags.setFlag(EntityFlag.OVER_SCAFFOLDING, isSneakingWithScaffolding); - flags.setFlag(EntityFlag.FALL_THROUGH_SCAFFOLDING, isSneakingWithScaffolding); - flags.setFlag(EntityFlag.OVER_SCAFFOLDING, isSneakingWithScaffolding); - - flagsChanged |= flags.getFlag(EntityFlag.IN_SCAFFOLDING) != touchingScaffolding; - flags.setFlag(EntityFlag.IN_SCAFFOLDING, touchingScaffolding); + flagsChanged |= flags.setFlag(EntityFlag.IN_SCAFFOLDING, touchingScaffolding); if (flagsChanged && updateMetadata) { session.getPlayerEntity().updateBedrockMetadata(session); diff --git a/connector/src/main/java/org/geysermc/connector/network/translators/inventory/InventoryTranslator.java b/connector/src/main/java/org/geysermc/connector/network/translators/inventory/InventoryTranslator.java index 2ca80041b..5c7a08834 100644 --- a/connector/src/main/java/org/geysermc/connector/network/translators/inventory/InventoryTranslator.java +++ b/connector/src/main/java/org/geysermc/connector/network/translators/inventory/InventoryTranslator.java @@ -550,6 +550,7 @@ public abstract class InventoryTranslator { switch (action.getType()) { case CRAFT_RECIPE_AUTO: { AutoCraftRecipeStackRequestActionData autoCraftAction = (AutoCraftRecipeStackRequestActionData) action; + // TODO autoCraftAction#getTimesCrafted 1.17.10 ??? if (craftState != CraftState.START) { return rejectRequest(request); }