From fe08932530af93d225adfe59ef1891fe34008aa5 Mon Sep 17 00:00:00 2001 From: chris Date: Thu, 25 Sep 2025 18:49:32 +0200 Subject: [PATCH 1/7] Update fabric-permission-api, switch to 0.4.1 release Updated fabric-permissions-api version from 0.4.0-SNAPSHOT to 0.4.1. --- gradle/libs.versions.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index ca197434f..f13dbbf14 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -34,7 +34,7 @@ velocity = "3.4.0-SNAPSHOT" viaproxy = "3.3.2-SNAPSHOT" fabric-loader = "0.16.14" fabric-api = "0.128.1+1.21.7" -fabric-permissions-api = "0.4.0-SNAPSHOT" +fabric-permissions-api = "0.4.1" neoforge-minecraft = "21.8.0-beta" mixin = "0.8.5" mixinextras = "0.3.5" From 61d7dc0a172cd53013b16d4904acb7775b032750 Mon Sep 17 00:00:00 2001 From: onebeastchris Date: Thu, 25 Sep 2025 19:26:35 +0200 Subject: [PATCH 2/7] Fix: Bedrock update notifications config option being ignored on Geyser-Fabric / Geyser-NeoForge --- bootstrap/bungeecord/build.gradle.kts | 5 ++++- .../platform/mod/GeyserModUpdateListener.java | 14 +++++++++----- gradle/libs.versions.toml | 2 ++ 3 files changed, 15 insertions(+), 6 deletions(-) diff --git a/bootstrap/bungeecord/build.gradle.kts b/bootstrap/bungeecord/build.gradle.kts index 84061650d..0216a43dd 100644 --- a/bootstrap/bungeecord/build.gradle.kts +++ b/bootstrap/bungeecord/build.gradle.kts @@ -8,7 +8,10 @@ dependencies { implementation(libs.cloud.bungee) implementation(libs.adventure.text.serializer.bungeecord) - compileOnlyApi(libs.bungeecord.proxy) + compileOnlyApi(libs.bungeecord.proxy) { + isTransitive = false + } + compileOnlyApi(libs.bungeecord.api) } platformRelocate("net.md_5.bungee.jni") diff --git a/bootstrap/mod/src/main/java/org/geysermc/geyser/platform/mod/GeyserModUpdateListener.java b/bootstrap/mod/src/main/java/org/geysermc/geyser/platform/mod/GeyserModUpdateListener.java index ec34766dc..6948bd1e1 100644 --- a/bootstrap/mod/src/main/java/org/geysermc/geyser/platform/mod/GeyserModUpdateListener.java +++ b/bootstrap/mod/src/main/java/org/geysermc/geyser/platform/mod/GeyserModUpdateListener.java @@ -26,17 +26,21 @@ package org.geysermc.geyser.platform.mod; import net.minecraft.server.level.ServerPlayer; +import org.geysermc.geyser.GeyserImpl; import org.geysermc.geyser.Permissions; import org.geysermc.geyser.platform.mod.command.ModCommandSource; import org.geysermc.geyser.util.VersionCheckUtils; public final class GeyserModUpdateListener { public static void onPlayReady(ServerPlayer player) { - // Should be creating this in the supplier, but we need it for the permission check. - // Not a big deal currently because ModCommandSource doesn't load locale, so don't need to try to wait for it. - ModCommandSource source = new ModCommandSource(player.createCommandSourceStack()); - if (source.hasPermission(Permissions.CHECK_UPDATE)) { - VersionCheckUtils.checkForGeyserUpdate(() -> source); + // We could just not register the listener, but, this allows config reloading + if (GeyserImpl.getInstance().getConfig().isNotifyOnNewBedrockUpdate()) { + // Should be creating this in the supplier, but we need it for the permission check. + // Not a big deal currently because ModCommandSource doesn't load locale, so don't need to try to wait for it. + ModCommandSource source = new ModCommandSource(player.createCommandSourceStack()); + if (source.hasPermission(Permissions.CHECK_UPDATE)) { + VersionCheckUtils.checkForGeyserUpdate(() -> source); + } } } diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index f13dbbf14..1e0358f39 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -30,6 +30,7 @@ cloud-minecraft = "2.0.0-beta.11" cloud-minecraft-modded = "2.0.0-beta.12" commodore = "2.2" bungeecord = "1.21-R0.1-20250215.224541-54" +bungeecord-api = "1.21-R0.1" velocity = "3.4.0-SNAPSHOT" viaproxy = "3.3.2-SNAPSHOT" fabric-loader = "0.16.14" @@ -121,6 +122,7 @@ neoforge-minecraft = { group = "net.neoforged", name = "neoforge", version.ref = adapters-spigot = { group = "org.geysermc.geyser.adapters", name = "spigot-all", version.ref = "adapters" } adapters-paper = { group = "org.geysermc.geyser.adapters", name = "paper-all", version.ref = "adapters" } bungeecord-proxy = { group = "net.md-5", name = "bungeecord-proxy", version.ref = "bungeecord" } +bungeecord-api = { group = "net.md-5", name = "bungeecord-api", version.ref = "bungeecord-api" } checker-qual = { group = "org.checkerframework", name = "checker-qual", version.ref = "checkerframework" } commodore = { group = "me.lucko", name = "commodore", version.ref = "commodore" } guava = { group = "com.google.guava", name = "guava", version.ref = "guava" } From 7588b9fed13879ab6ac3663f5dde1f4b187b1d81 Mon Sep 17 00:00:00 2001 From: onebeastchris Date: Thu, 25 Sep 2025 23:16:33 +0200 Subject: [PATCH 3/7] Fix: Client-side happy ghast movement is not influenced by the NO_AI flag --- .../geyser/entity/type/living/animal/HappyGhastEntity.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/core/src/main/java/org/geysermc/geyser/entity/type/living/animal/HappyGhastEntity.java b/core/src/main/java/org/geysermc/geyser/entity/type/living/animal/HappyGhastEntity.java index bdd8fe305..15bcd09fa 100644 --- a/core/src/main/java/org/geysermc/geyser/entity/type/living/animal/HappyGhastEntity.java +++ b/core/src/main/java/org/geysermc/geyser/entity/type/living/animal/HappyGhastEntity.java @@ -208,7 +208,7 @@ public class HappyGhastEntity extends AnimalEntity implements ClientVehicle { @Override public boolean isClientControlled() { - if (!hasBodyArmor() || getFlag(EntityFlag.NO_AI) || staysStill) { + if (!hasBodyArmor() || staysStill) { return false; } From 1600ccb2c29da9a1f8f1ce63d52c5ae58d3cb9af Mon Sep 17 00:00:00 2001 From: onebeastchris Date: Fri, 26 Sep 2025 00:11:41 +0200 Subject: [PATCH 4/7] Fix: Reset current block variables after block breaking is aborted --- .../org/geysermc/geyser/session/cache/BlockBreakHandler.java | 1 + 1 file changed, 1 insertion(+) diff --git a/core/src/main/java/org/geysermc/geyser/session/cache/BlockBreakHandler.java b/core/src/main/java/org/geysermc/geyser/session/cache/BlockBreakHandler.java index 3eca7d7fe..b8b49fb7c 100644 --- a/core/src/main/java/org/geysermc/geyser/session/cache/BlockBreakHandler.java +++ b/core/src/main/java/org/geysermc/geyser/session/cache/BlockBreakHandler.java @@ -374,6 +374,7 @@ public class BlockBreakHandler { } BlockUtils.sendBedrockStopBlockBreak(session, position.toFloat()); + this.clearCurrentVariables(); } /** From 30a44a04f0316d1113ec13f3c718d715f1161267 Mon Sep 17 00:00:00 2001 From: Phillipp Glanz <6745190+TheMeinerLP@users.noreply.github.com> Date: Mon, 29 Sep 2025 15:02:48 +0200 Subject: [PATCH 5/7] Cleanup: Use compiled patterns where possible (#5523) * Refactor: use a compiled pattern for skin hash validation * Refactor: use compiled pattern for IP address validation * Refactor: simplify extension filter to a single compiled pattern --- .../main/java/org/geysermc/geyser/GeyserImpl.java | 4 ++-- .../geyser/extension/GeyserExtensionLoader.java | 14 ++++++-------- .../populator/CustomSkullRegistryPopulator.java | 5 ++++- 3 files changed, 12 insertions(+), 11 deletions(-) diff --git a/core/src/main/java/org/geysermc/geyser/GeyserImpl.java b/core/src/main/java/org/geysermc/geyser/GeyserImpl.java index 6a40d5efa..58068425e 100644 --- a/core/src/main/java/org/geysermc/geyser/GeyserImpl.java +++ b/core/src/main/java/org/geysermc/geyser/GeyserImpl.java @@ -148,7 +148,7 @@ public class GeyserImpl implements GeyserApi, EventRegistrar { */ public static final String OAUTH_CLIENT_ID = "204cefd1-4818-4de1-b98d-513fae875d88"; - private static final String IP_REGEX = "\\b\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}\\b"; + private static final Pattern IP_REGEX = Pattern.compile("\\b\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}\\b"); private final SessionManager sessionManager = new SessionManager(); @@ -406,7 +406,7 @@ public class GeyserImpl implements GeyserApi, EventRegistrar { String remoteAddress = config.getRemote().address(); // Filters whether it is not an IP address or localhost, because otherwise it is not possible to find out an SRV entry. - if (!remoteAddress.matches(IP_REGEX) && !remoteAddress.equalsIgnoreCase("localhost")) { + if (!IP_REGEX.matcher(remoteAddress).matches() && !remoteAddress.equalsIgnoreCase("localhost")) { String[] record = WebUtils.findSrvRecord(this, remoteAddress); if (record != null) { int remotePort = Integer.parseInt(record[2]); diff --git a/core/src/main/java/org/geysermc/geyser/extension/GeyserExtensionLoader.java b/core/src/main/java/org/geysermc/geyser/extension/GeyserExtensionLoader.java index 10cbcf556..2bfa6cce6 100644 --- a/core/src/main/java/org/geysermc/geyser/extension/GeyserExtensionLoader.java +++ b/core/src/main/java/org/geysermc/geyser/extension/GeyserExtensionLoader.java @@ -63,7 +63,7 @@ import java.util.regex.Pattern; @RequiredArgsConstructor public class GeyserExtensionLoader extends ExtensionLoader { - private static final Pattern[] EXTENSION_FILTERS = new Pattern[] { Pattern.compile("^.+\\.jar$") }; + private static final Pattern EXTENSION_FILTER = Pattern.compile("^.+\\.jar$"); private final Object2ObjectMap> classes = new Object2ObjectOpenHashMap<>(); private final Map classLoaders = new HashMap<>(); @@ -133,8 +133,8 @@ public class GeyserExtensionLoader extends ExtensionLoader { } } - public Pattern[] extensionFilters() { - return EXTENSION_FILTERS; + public Pattern extensionFilter() { + return EXTENSION_FILTER; } public Class classByName(final String name) throws ClassNotFoundException{ @@ -249,17 +249,15 @@ public class GeyserExtensionLoader extends ExtensionLoader { */ private void processExtensionsFolder(Path directory, ThrowingBiConsumer accept, BiConsumer reject) throws IOException { List extensionPaths = Files.list(directory).toList(); - Pattern[] extensionFilters = this.extensionFilters(); + Pattern extensionFilter = this.extensionFilter(); extensionPaths.forEach(path -> { if (Files.isDirectory(path)) { return; } // Only look at files that meet the extension filter - for (Pattern filter : extensionFilters) { - if (!filter.matcher(path.getFileName().toString()).matches()) { - return; - } + if (!extensionFilter.matcher(path.getFileName().toString()).matches()) { + return; } try { diff --git a/core/src/main/java/org/geysermc/geyser/registry/populator/CustomSkullRegistryPopulator.java b/core/src/main/java/org/geysermc/geyser/registry/populator/CustomSkullRegistryPopulator.java index ec7243396..3e09666bf 100644 --- a/core/src/main/java/org/geysermc/geyser/registry/populator/CustomSkullRegistryPopulator.java +++ b/core/src/main/java/org/geysermc/geyser/registry/populator/CustomSkullRegistryPopulator.java @@ -48,9 +48,12 @@ import java.util.ArrayList; import java.util.List; import java.util.concurrent.ExecutionException; import java.util.function.Function; +import java.util.regex.Pattern; public class CustomSkullRegistryPopulator { + private static final Pattern SKULL_HASH_PATTERN = Pattern.compile("^[a-fA-F0-9]{64}$"); + public static void populate() { SkullResourcePackManager.SKULL_SKINS.clear(); // Remove skins after reloading BlockRegistries.CUSTOM_SKULLS.set(Object2ObjectMaps.emptyMap()); @@ -117,7 +120,7 @@ public class CustomSkullRegistryPopulator { }); skinHashes.forEach((skinHash) -> { - if (!skinHash.matches("^[a-fA-F0-9]+$")) { + if (!SKULL_HASH_PATTERN.matcher(skinHash).matches()) { GeyserImpl.getInstance().getLogger().error("Skin hash " + skinHash + " does not match required format ^[a-fA-F0-9]{64}$ and will not be added as a custom block."); return; } From c694daf81b681d923df8a51fdb8c2bee0aa8ba4b Mon Sep 17 00:00:00 2001 From: chris Date: Tue, 30 Sep 2025 01:05:16 +0200 Subject: [PATCH 6/7] Block breaking calculations v2 (#5846) * Make block break progress calculations more accurate * Track blockstate / item updates geyser-sided * Fix: ghost blocks in specific circumstances --- .../org/geysermc/geyser/item/type/Item.java | 1 + .../session/cache/BlockBreakHandler.java | 280 ++++++++++++------ .../geyser/session/cache/WorldCache.java | 7 + .../translator/item/BedrockItemBuilder.java | 5 + 4 files changed, 199 insertions(+), 94 deletions(-) diff --git a/core/src/main/java/org/geysermc/geyser/item/type/Item.java b/core/src/main/java/org/geysermc/geyser/item/type/Item.java index bf8d4786e..84d3e37fb 100644 --- a/core/src/main/java/org/geysermc/geyser/item/type/Item.java +++ b/core/src/main/java/org/geysermc/geyser/item/type/Item.java @@ -256,6 +256,7 @@ public class Item { if (bedrockEnchantment == null) { String enchantmentTranslation = MinecraftLocale.getLocaleString(enchantment.description(), session.locale()); addJavaOnlyEnchantment(session, builder, enchantmentTranslation, level); + builder.addEnchantmentGlint(); return null; } diff --git a/core/src/main/java/org/geysermc/geyser/session/cache/BlockBreakHandler.java b/core/src/main/java/org/geysermc/geyser/session/cache/BlockBreakHandler.java index b8b49fb7c..041f76c03 100644 --- a/core/src/main/java/org/geysermc/geyser/session/cache/BlockBreakHandler.java +++ b/core/src/main/java/org/geysermc/geyser/session/cache/BlockBreakHandler.java @@ -29,11 +29,13 @@ import com.google.common.cache.Cache; import com.google.common.cache.CacheBuilder; import it.unimi.dsi.fastutil.Pair; import lombok.Getter; +import lombok.Setter; import org.checkerframework.checker.nullness.qual.NonNull; import org.checkerframework.checker.nullness.qual.Nullable; import org.cloudburstmc.math.vector.Vector3f; import org.cloudburstmc.math.vector.Vector3i; import org.cloudburstmc.protocol.bedrock.data.LevelEvent; +import org.cloudburstmc.protocol.bedrock.data.PlayerActionType; import org.cloudburstmc.protocol.bedrock.data.PlayerAuthInputData; import org.cloudburstmc.protocol.bedrock.data.PlayerBlockActionData; import org.cloudburstmc.protocol.bedrock.data.definitions.ItemDefinition; @@ -83,6 +85,7 @@ public class BlockBreakHandler { * The position of the current block being broken. * Null indicates no block breaking in progress. */ + @Getter protected @Nullable Vector3i currentBlockPos = null; /** @@ -92,22 +95,39 @@ public class BlockBreakHandler { protected @Nullable BlockState currentBlockState = null; /** - * The Bedrock client tick in which block breaking of the current block began. + * Indicates that we should re-check the current block state for changes + */ + @Setter + protected @Nullable Integer updatedServerBlockStateId; + + /** + * Whether we must break the block ourselves. * Only set when keeping track of custom blocks / custom items breaking blocks. */ - protected long blockStartBreakTime = 0; + protected boolean serverSideBlockBreaking = false; + + /** + * The current block breaking progress + */ + protected float currentProgress = 0.0F; /** * The last known face of the block the client was breaking. * Only set when keeping track of custom blocks / custom items breaking blocks. */ - protected Direction lastBlockBreakFace = null; + protected Direction currentBlockFace = null; /** - * The last block position that was instantly broken. + * The last item used to break blocks. + * Used to track whether block breaking should be re-started as the item changed + */ + protected GeyserItemStack currentItemStack = null; + + /** + * The last block position that was broken. * Used to ignore subsequent block actions from the Bedrock client. */ - protected Vector3i lastInstaMinedPosition = null; + protected Vector3i lastMinedPosition = null; /** * Caches all blocks we had to restore e.g. due to out-of-range or being unable to mine @@ -148,18 +168,19 @@ public class BlockBreakHandler { restoredBlocks.clear(); this.itemFramePos = null; } else { - tick(); + tick(packet.getTick()); } } - protected void tick() { + protected void tick(long tick) { // We need to manually check if a block should be destroyed, and send the client progress updates, when mining a custom block, or with a custom item // This is because, in CustomItemRegistryPopulator#computeToolProperties, we set a block break speed of 0, - // meaning the client will only ever send START_BREAK for breaking blocks, and nothing else + // meaning the client will only ever send START_BREAK for breaking blocks, and nothing else (as long as no efficiency is applied, lol) + // We also want to tick destroying to ensure that the currently held item did not change // Check lastBlockBreakFace, currentBlockPos and currentBlockState, just in case - if (blockStartBreakTime != 0 && lastBlockBreakFace != null && currentBlockPos != null && currentBlockState != null) { - handleContinueDestroy(currentBlockPos, currentBlockState, lastBlockBreakFace, session.getClientTicks()); + if (currentBlockFace != null && currentBlockPos != null && currentBlockState != null) { + handleContinueDestroy(currentBlockPos, getCurrentBlockState(currentBlockPos), currentBlockFace, false, false, session.getClientTicks()); } } @@ -170,51 +191,66 @@ public class BlockBreakHandler { // Worth noting: the bedrock client, as of version 1.21.101, sends weird values for the face, outside the [0;6] range, when sending ABORT_BREAK // Not sure why, but, blockFace isn't used for ABORT_BREAK, so it's fine // This is why blockFace is individually turned into a Direction in each of the switch statements, except for the ABORT_BREAK one - switch (actionData.getAction()) { case DROP_ITEM -> { ServerboundPlayerActionPacket dropItemPacket = new ServerboundPlayerActionPacket(PlayerAction.DROP_ITEM, position, Direction.getUntrusted(actionData, PlayerBlockActionData::getFace).mcpl(), 0); session.sendDownstreamGamePacket(dropItemPacket); } - // Must do this ugly as it can also be called from the block_continue_destroy case :( - case START_BREAK -> preStartBreakHandle(position, Direction.getUntrusted(actionData, PlayerBlockActionData::getFace), packet.getTick()); - case BLOCK_CONTINUE_DESTROY -> { - if (testForItemFrameEntity(position) || testForLastInstaBreakPosOrReset(position) || abortDueToBlockRestoring(position)) { + case START_BREAK -> { + // New block being broken -> ignore previously mined position since that's no longer relevant + this.lastMinedPosition = null; + + if (testForItemFrameEntity(position) || abortDueToBlockRestoring(position)) { continue; } - Direction blockFace = Direction.getUntrusted(actionData, PlayerBlockActionData::getFace); - // Position mismatch == we break a new block! Bedrock won't send START_BREAK when continuously mining - // That applies in creative mode too! (last test in 1.21.100) - if (!Objects.equals(position, currentBlockPos) || currentBlockState == null) { - if (currentBlockPos != null) { - handleAbortBreaking(currentBlockPos); - } - preStartBreakHandle(position, blockFace, packet.getTick()); + BlockState state = getCurrentBlockState(position); + if (!canBreak(position, state, actionData.getAction())) { + BlockUtils.sendBedrockStopBlockBreak(session, position.toFloat()); + restoredBlocks.add(position); + continue; + } + + handleStartBreak(position, state, Direction.getUntrusted(actionData, PlayerBlockActionData::getFace), packet.getTick()); + } + case BLOCK_CONTINUE_DESTROY -> { + if (testForItemFrameEntity(position) || testForLastBreakPosOrReset(position) || abortDueToBlockRestoring(position)) { continue; } // The client loves to send this block action alongside BLOCK_PREDICT_DESTROY in the same packet; - // we can skip handling this action if the same position is updated again in the same tick - if (i < packet.getPlayerActions().size() - 1) { + // we can skip handling this action about the current position if the next action is also about it + if (Objects.equals(currentBlockPos, position) && i < packet.getPlayerActions().size() - 1) { PlayerBlockActionData nextAction = packet.getPlayerActions().get(i + 1); if (Objects.equals(nextAction.getBlockPosition(), position)) { continue; } } - BlockState state = session.getGeyser().getWorldManager().blockAt(session, position); - if (!canBreak(position, state)) { + BlockState state = getCurrentBlockState(position); + if (!canBreak(position, state, actionData.getAction())) { BlockUtils.sendBedrockStopBlockBreak(session, position.toFloat()); restoredBlocks.add(position); + + // Also abort old / "current" block breaking, if there is one in progress + if (!Objects.equals(currentBlockPos, position)) { + handleAbortBreaking(position); + } continue; } - handleContinueDestroy(position, state, blockFace, packet.getTick()); + handleContinueDestroy(position, state, Direction.getUntrusted(actionData, PlayerBlockActionData::getFace), false, true, packet.getTick()); } case BLOCK_PREDICT_DESTROY -> { - if (testForItemFrameEntity(position) || testForLastInstaBreakPosOrReset(position)) { + if (testForItemFrameEntity(position)) { + continue; + } + + // At this point it's safe to assume that we won't get subsequent block actions on this position + // so reset it and return since we've already broken the block + if (Objects.equals(lastMinedPosition, position)) { + lastMinedPosition = null; continue; } @@ -225,12 +261,13 @@ public class BlockBreakHandler { continue; } - BlockState state = session.getGeyser().getWorldManager().blockAt(session, position); - boolean valid = currentBlockState != null && Objects.equals(position, currentBlockPos); - if (!canBreak(position, state) || !valid) { + BlockState state = getCurrentBlockState(position); + boolean valid = currentBlockPos != null && Objects.equals(position, currentBlockPos); + if (!canBreak(position, state, actionData.getAction()) || !valid) { if (!valid) { GeyserImpl.getInstance().getLogger().warning("Player %s tried to break block at %s (%s), without starting to destroy it!" - .formatted(session.bedrockUsername(), position, currentBlockState)); + .formatted(session.bedrockUsername(), position, currentBlockPos)); + handleAbortBreaking(currentBlockPos); } BlockUtils.stopBreakAndRestoreBlock(session, position, state); restoredBlocks.add(position); @@ -240,14 +277,6 @@ public class BlockBreakHandler { handlePredictDestroy(position, state, Direction.getUntrusted(actionData, PlayerBlockActionData::getFace), packet.getTick()); } case ABORT_BREAK -> { - // Abort break can also be sent after the block on that pos was broken..... - // At that point it's safe to assume that we won't get subsequent block actions on this position - // so reset it and return since there isn't anything to abort - if (Objects.equals(lastInstaMinedPosition, position)) { - lastInstaMinedPosition = null; - continue; - } - // Also handles item frame interactions in adventure mode if (testForItemFrameEntity(position)) { continue; @@ -265,28 +294,6 @@ public class BlockBreakHandler { } } - /** - * Called from either a START_BREAK or BLOCK_CONTINUE_DESTROY case, the latter - * if the client switches to a new block. This method then runs pre-break checks. - */ - private void preStartBreakHandle(Vector3i position, Direction blockFace, long tick) { - // New block being broken -> ignore previous insta-mine pos since that's no longer relevant - lastInstaMinedPosition = null; - - if (testForItemFrameEntity(position) || abortDueToBlockRestoring(position)) { - return; - } - - BlockState state = session.getGeyser().getWorldManager().blockAt(session, position); - if (!canBreak(position, state)) { - BlockUtils.sendBedrockStopBlockBreak(session, position.toFloat()); - restoredBlocks.add(position); - return; - } - - handleStartBreak(position, state, blockFace, tick); - } - protected void handleStartBreak(@NonNull Vector3i position, @NonNull BlockState state, Direction blockFace, long tick) { GeyserItemStack item = session.getPlayerInventory().getItemInHand(); @@ -305,8 +312,8 @@ public class BlockBreakHandler { // insta-breaking should be treated differently; don't send STOP_BREAK for these if (session.isInstabuild() || breakProgress >= 1.0F) { // Avoid sending STOP_BREAK for instantly broken blocks - lastInstaMinedPosition = position; destroyBlock(state, position, blockFace, true); + this.lastMinedPosition = position; } else { // If the block is custom or the breaking item is custom, we must keep track of break time ourselves ItemMapping mapping = item.getMapping(session); @@ -314,11 +321,10 @@ public class BlockBreakHandler { CustomBlockState blockStateOverride = BlockRegistries.CUSTOM_BLOCK_STATE_OVERRIDES.get(state.javaId()); SkullCache.Skull skull = session.getSkullCache().getSkulls().get(position); - this.blockStartBreakTime = 0; + this.serverSideBlockBreaking = false; if (BlockRegistries.NON_VANILLA_BLOCK_IDS.get().get(state.javaId()) || blockStateOverride != null || - customItem != null || (skull != null && skull.getBlockDefinition() != null)) { - this.blockStartBreakTime = tick; - this.lastBlockBreakFace = blockFace; + customItem != null || (skull != null && skull.getBlockDefinition() != null)) { + this.serverSideBlockBreaking = true; } LevelEventPacket startBreak = new LevelEventPacket(); @@ -329,42 +335,82 @@ public class BlockBreakHandler { BlockUtils.spawnBlockBreakParticles(session, blockFace, position, state); + this.currentBlockFace = blockFace; this.currentBlockPos = position; this.currentBlockState = state; + this.currentItemStack = item; + // The Java client calls MultiPlayerGameMode#startDestroyBlock which would set this to zero, + // but also #continueDestroyBlock in the same tick to advance the break progress. + this.currentProgress = breakProgress; session.sendDownstreamGamePacket(new ServerboundPlayerActionPacket(PlayerAction.START_DIGGING, position, blockFace.mcpl(), session.getWorldCache().nextPredictionSequence())); } } - protected void handleContinueDestroy(Vector3i position, BlockState state, Direction blockFace, long tick) { - BlockUtils.spawnBlockBreakParticles(session, blockFace, position, state); - double totalBreakTime = BlockUtils.reciprocal(calculateBreakProgress(state, position, session.getPlayerInventory().getItemInHand())); + protected void handleContinueDestroy(@NonNull Vector3i position, @NonNull BlockState state, @NonNull Direction blockFace, boolean bedrockDestroyed, boolean sendParticles, long tick) { + // Position mismatch == we break a new block! Bedrock won't send START_BREAK when continuously mining + // That applies in creative mode too! (last test in 1.21.100) + // Further: We should also "start" breaking te block anew if the held item changes. + // As of 1.21.100 it seems like this is in fact NOT done by BDS! + if (currentBlockState != null && Objects.equals(position, currentBlockPos) && sameItemStack()) { + this.currentBlockFace = blockFace; - if (blockStartBreakTime != 0) { - long ticksSinceStart = tick - blockStartBreakTime; - // We need to add a slight delay to the break time, otherwise the client breaks blocks too fast - if (ticksSinceStart >= (totalBreakTime += 2)) { - destroyBlock(state, position, blockFace, false); - return; + final float newProgress = calculateBreakProgress(state, position, session.getPlayerInventory().getItemInHand()); + this.currentProgress = this.currentProgress + newProgress; + double totalBreakTime = BlockUtils.reciprocal(newProgress); + + if (sendParticles || (serverSideBlockBreaking && currentProgress % 4 == 0)) { + BlockUtils.spawnBlockBreakParticles(session, blockFace, position, state); } - // Update in case it has changed - lastBlockBreakFace = blockFace; - } - // Update the break time in the event that player conditions changed (jumping, effects applied) - LevelEventPacket updateBreak = new LevelEventPacket(); - updateBreak.setType(LevelEvent.BLOCK_UPDATE_BREAK); - updateBreak.setPosition(position.toFloat()); - updateBreak.setData((int) (65535 / totalBreakTime)); - session.sendUpstreamPacket(updateBreak); + // let's be a bit lenient here; the Vanilla server is as well + if (mayBreak(currentProgress, bedrockDestroyed)) { + destroyBlock(state, position, blockFace, false); + if (!bedrockDestroyed) { + // Only store it if we need to ignore subsequent Bedrock block actions + this.lastMinedPosition = position; + } + return; + } else if (bedrockDestroyed) { + BlockUtils.restoreCorrectBlock(session, position, state); + } + + // Update the break time in the event that player conditions changed (jumping, effects applied) + LevelEventPacket updateBreak = new LevelEventPacket(); + updateBreak.setType(LevelEvent.BLOCK_UPDATE_BREAK); + updateBreak.setPosition(position.toFloat()); + updateBreak.setData((int) (65535 / totalBreakTime)); + session.sendUpstreamPacket(updateBreak); + } else { + // Don't store last mined position; we don't want to ignore any actions now that we switched! + this.lastMinedPosition = null; + // We have switched - either between blocks, or are between the stack we're using to break the block + if (currentBlockPos != null) { + LevelEventPacket updateBreak = new LevelEventPacket(); + updateBreak.setType(LevelEvent.BLOCK_UPDATE_BREAK); + updateBreak.setPosition(position.toFloat()); + updateBreak.setData(0); + session.sendUpstreamPacketImmediately(updateBreak); + + // Prevent ghost blocks when Bedrock thinks it destroyed a block and wants to "move on", + // while it wasn't actually destroyed on our end. + if (bedrockDestroyed) { + BlockUtils.restoreCorrectBlock(session, currentBlockPos, currentBlockState); + } + + handleAbortBreaking(currentBlockPos); + } + + handleStartBreak(position, state, blockFace, tick); + } } protected void handlePredictDestroy(Vector3i position, BlockState state, Direction blockFace, long tick) { - destroyBlock(state, position, blockFace, false); + handleContinueDestroy(position, state, blockFace, true, true, tick); } - protected void handleAbortBreaking(Vector3i position) { + private void handleAbortBreaking(Vector3i position) { // Bedrock edition "confirms" it stopped breaking blocks by sending an abort packet // We don't forward those as a Java client wouldn't send those either if (currentBlockPos != null) { @@ -412,6 +458,12 @@ public class BlockBreakHandler { if (!restoredBlocks.isEmpty()) { BlockUtils.sendBedrockStopBlockBreak(session, position.toFloat()); restoredBlocks.add(position); + + if (currentBlockPos != null && !Objects.equals(position, currentBlockPos)) { + restoredBlocks.add(currentBlockPos); + handleAbortBreaking(currentBlockPos); + } + return true; } return false; @@ -422,7 +474,7 @@ public class BlockBreakHandler { * This includes world border, "hands busy" (boat steering), and GameMode checks. */ @SuppressWarnings("BooleanMethodIsAlwaysInverted") - protected boolean canBreak(Vector3i vector, BlockState state) { + protected boolean canBreak(Vector3i vector, BlockState state, PlayerActionType action) { if (session.isHandsBusy() || !session.getWorldBorder().isInsideBorderBoundaries()) { return false; } @@ -461,6 +513,11 @@ public class BlockBreakHandler { return !state.is(Blocks.AIR); } + protected boolean mayBreak(float progress, boolean bedrockDestroyed) { + // We're tolerant here to account for e.g. obsidian breaking speeds not matching 1:1 :( + return (serverSideBlockBreaking && progress >= 1.0F) || (bedrockDestroyed && progress >= 0.7F); + } + protected void destroyBlock(BlockState state, Vector3i vector, Direction direction, boolean instamine) { // Send java packet session.sendDownstreamGamePacket(new ServerboundPlayerActionPacket(instamine ? PlayerAction.START_DIGGING : PlayerAction.FINISH_DIGGING, @@ -485,21 +542,56 @@ public class BlockBreakHandler { * This ensures that Geyser does not send a FINISH_DIGGING player action for instantly mined blocks, * or those mined while in creative mode. */ - protected boolean testForLastInstaBreakPosOrReset(Vector3i position) { - if (Objects.equals(lastInstaMinedPosition, position)) { + protected boolean testForLastBreakPosOrReset(Vector3i position) { + if (Objects.equals(lastMinedPosition, position)) { return true; } - lastInstaMinedPosition = null; + lastMinedPosition = null; return false; } + private boolean sameItemStack() { + if (currentItemStack == null) { + return false; + } + GeyserItemStack stack = session.getPlayerInventory().getItemInHand(); + if (currentItemStack.isEmpty() && stack.isEmpty()) { + return true; + } + if (currentItemStack.getJavaId() != stack.getJavaId()) { + return false; + } + + return Objects.equals(stack.getComponents(), currentItemStack.getComponents()); + } + + private @NonNull BlockState getCurrentBlockState(Vector3i position) { + if (Objects.equals(position, currentBlockPos)) { + if (updatedServerBlockStateId != null) { + BlockState updated = BlockState.of(updatedServerBlockStateId); + this.updatedServerBlockStateId = null; + return updated; + } + + if (currentBlockState != null) { + return currentBlockState; + } + } + + this.updatedServerBlockStateId = null; + return session.getGeyser().getWorldManager().blockAt(session, position); + } + /** * Resets variables after a block was broken. */ protected void clearCurrentVariables() { this.currentBlockPos = null; this.currentBlockState = null; - this.blockStartBreakTime = 0L; + this.currentBlockFace = null; + this.currentProgress = 0.0F; + this.currentItemStack = null; + this.updatedServerBlockStateId = null; } /** @@ -507,7 +599,7 @@ public class BlockBreakHandler { */ public void reset() { clearCurrentVariables(); - this.lastInstaMinedPosition = null; + this.lastMinedPosition = null; this.destructionStageCache.invalidateAll(); } diff --git a/core/src/main/java/org/geysermc/geyser/session/cache/WorldCache.java b/core/src/main/java/org/geysermc/geyser/session/cache/WorldCache.java index 6108c6432..f06c45d5f 100644 --- a/core/src/main/java/org/geysermc/geyser/session/cache/WorldCache.java +++ b/core/src/main/java/org/geysermc/geyser/session/cache/WorldCache.java @@ -47,6 +47,7 @@ import org.geysermc.mcprotocollib.protocol.data.game.setting.Difficulty; import java.util.Iterator; import java.util.Map; +import java.util.Objects; public final class WorldCache { private final GeyserSession session; @@ -179,6 +180,12 @@ public final class WorldCache { this.unverifiedPredictions.removeInt(position); } + // Hack to avoid looking up blockstates for the currently broken position each tick + Vector3i clientBreakPos = session.getBlockBreakHandler().getCurrentBlockPos(); + if (clientBreakPos != null && Objects.equals(clientBreakPos, position)) { + session.getBlockBreakHandler().setUpdatedServerBlockStateId(blockState); + } + ChunkUtils.updateBlock(session, blockState, position); } diff --git a/core/src/main/java/org/geysermc/geyser/translator/item/BedrockItemBuilder.java b/core/src/main/java/org/geysermc/geyser/translator/item/BedrockItemBuilder.java index 2f51c0007..86bf29e94 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/item/BedrockItemBuilder.java +++ b/core/src/main/java/org/geysermc/geyser/translator/item/BedrockItemBuilder.java @@ -79,6 +79,11 @@ public final class BedrockItemBuilder { return this; } + public BedrockItemBuilder addEnchantmentGlint() { + putList("ench", NbtType.COMPOUND, List.of()); + return this; + } + @NonNull public NbtMapBuilder getOrCreateNbt() { if (builder == null) { From d2dd949eebfd70fd531a76772fb5c30c5285987c Mon Sep 17 00:00:00 2001 From: Eclipse Date: Tue, 30 Sep 2025 12:59:14 +0000 Subject: [PATCH 7/7] Support bedrock 1.21.110 (#5844) * Initial work on 1.21.110 * Drop support for 1.21.70 and 1.21.80 * Update README * Target new mappings, build on Protocol without adventure * Add item tags for 1.21.100 and 1.21.110 * Target protocol with separate adventure module, cleanup * Use upstream protocol library * Update to 844, send fake chest whenever a single chest can be merged into a double chest on the client * Target mappings at master * Actually update to 844 --------- Co-authored-by: chris --- README.md | 2 +- .../geyser/entity/type/BoatEntity.java | 13 +- .../geyser/entity/type/PaintingEntity.java | 5 - .../holder/BlockInventoryHolder.java | 4 +- .../geysermc/geyser/network/GameProtocol.java | 22 +- .../geyser/network/UpstreamPacketHandler.java | 20 +- .../populator/BlockRegistryPopulator.java | 14 +- .../populator/ItemRegistryPopulator.java | 47 +- .../populator/TagRegistryPopulator.java | 14 +- ...ion800_786.java => Conversion844_827.java} | 24 +- .../geyser/session/GeyserSession.java | 23 +- .../geyser/session/cache/FormCache.java | 54 +- .../inventory/ShulkerInventoryTranslator.java | 2 +- .../chest/SingleChestInventoryTranslator.java | 31 +- .../BedrockPlayerAuthInputTranslator.java | 18 +- .../bedrock/block_palette.1_21_110.nbt | Bin 0 -> 202128 bytes .../bedrock/block_palette.1_21_70.nbt | Bin 193872 -> 0 bytes .../bedrock/block_palette.1_21_80.nbt | Bin 194075 -> 0 bytes ...1_80.json => creative_items.1_21_110.json} | 1930 +-- .../bedrock/creative_items.1_21_70.json | 8960 ------------- .../resources/bedrock/entity_identifiers.dat | Bin 8445 -> 8513 bytes .../resources/bedrock/item_tags.1_21_100.json | 850 ++ .../resources/bedrock/item_tags.1_21_110.json | 896 ++ ...gs.1_21_70.json => item_tags.1_21_90.json} | 0 ...json => runtime_item_states.1_21_110.json} | 776 +- .../bedrock/runtime_item_states.1_21_70.json | 10784 ---------------- .../bedrock/stripped_biome_definitions.json | 103 +- core/src/main/resources/mappings | 2 +- gradle.properties | 2 +- gradle/libs.versions.toml | 6 +- 30 files changed, 3758 insertions(+), 20844 deletions(-) rename core/src/main/java/org/geysermc/geyser/registry/populator/conversion/{Conversion800_786.java => Conversion844_827.java} (61%) create mode 100644 core/src/main/resources/bedrock/block_palette.1_21_110.nbt delete mode 100644 core/src/main/resources/bedrock/block_palette.1_21_70.nbt delete mode 100644 core/src/main/resources/bedrock/block_palette.1_21_80.nbt rename core/src/main/resources/bedrock/{creative_items.1_21_80.json => creative_items.1_21_110.json} (90%) delete mode 100644 core/src/main/resources/bedrock/creative_items.1_21_70.json create mode 100644 core/src/main/resources/bedrock/item_tags.1_21_100.json create mode 100644 core/src/main/resources/bedrock/item_tags.1_21_110.json rename core/src/main/resources/bedrock/{item_tags.1_21_70.json => item_tags.1_21_90.json} (100%) rename core/src/main/resources/bedrock/{runtime_item_states.1_21_80.json => runtime_item_states.1_21_110.json} (95%) delete mode 100644 core/src/main/resources/bedrock/runtime_item_states.1_21_70.json diff --git a/README.md b/README.md index 27180ffa9..096a81486 100644 --- a/README.md +++ b/README.md @@ -15,7 +15,7 @@ The ultimate goal of this project is to allow Minecraft: Bedrock Edition users t Special thanks to the DragonProxy project for being a trailblazer in protocol translation and for all the team members who have joined us here! ## Supported Versions -Geyser is currently supporting Minecraft Bedrock 1.21.70 - 1.21.101 and Minecraft Java 1.21.7 - 1.21.8. For more information, please see [here](https://geysermc.org/wiki/geyser/supported-versions/). +Geyser is currently supporting Minecraft Bedrock 1.21.90 - 1.21.110 and Minecraft Java 1.21.7 - 1.21.8. For more information, please see [here](https://geysermc.org/wiki/geyser/supported-versions/). ## Setting Up Take a look [here](https://geysermc.org/wiki/geyser/setup/) for how to set up Geyser. diff --git a/core/src/main/java/org/geysermc/geyser/entity/type/BoatEntity.java b/core/src/main/java/org/geysermc/geyser/entity/type/BoatEntity.java index 0ba1c1277..3b77b1eec 100644 --- a/core/src/main/java/org/geysermc/geyser/entity/type/BoatEntity.java +++ b/core/src/main/java/org/geysermc/geyser/entity/type/BoatEntity.java @@ -33,7 +33,6 @@ import org.cloudburstmc.protocol.bedrock.packet.AnimatePacket; import org.cloudburstmc.protocol.bedrock.packet.MoveEntityAbsolutePacket; import org.geysermc.geyser.entity.EntityDefinition; import org.geysermc.geyser.entity.EntityDefinitions; -import org.geysermc.geyser.network.GameProtocol; import org.geysermc.geyser.session.GeyserSession; import org.geysermc.geyser.util.InteractionResult; import org.geysermc.geyser.util.InteractiveTag; @@ -208,19 +207,11 @@ public class BoatEntity extends Entity implements Leashable, Tickable { if (isPaddlingLeft) { paddleTimeLeft += ROWING_SPEED; - if (GameProtocol.is1_21_80orHigher(session)) { - dirtyMetadata.put(EntityDataTypes.ROW_TIME_LEFT, paddleTimeLeft); - } else { - sendAnimationPacket(session, rower, AnimatePacket.Action.ROW_LEFT, paddleTimeLeft); - } + dirtyMetadata.put(EntityDataTypes.ROW_TIME_LEFT, paddleTimeLeft); } if (isPaddlingRight) { paddleTimeRight += ROWING_SPEED; - if (GameProtocol.is1_21_80orHigher(session)) { - dirtyMetadata.put(EntityDataTypes.ROW_TIME_RIGHT, paddleTimeRight); - } else { - sendAnimationPacket(session, rower, AnimatePacket.Action.ROW_RIGHT, paddleTimeRight); - } + dirtyMetadata.put(EntityDataTypes.ROW_TIME_RIGHT, paddleTimeRight); } } diff --git a/core/src/main/java/org/geysermc/geyser/entity/type/PaintingEntity.java b/core/src/main/java/org/geysermc/geyser/entity/type/PaintingEntity.java index 2b9c569de..ea3600768 100644 --- a/core/src/main/java/org/geysermc/geyser/entity/type/PaintingEntity.java +++ b/core/src/main/java/org/geysermc/geyser/entity/type/PaintingEntity.java @@ -29,7 +29,6 @@ import org.cloudburstmc.math.vector.Vector3f; import org.cloudburstmc.protocol.bedrock.packet.AddPaintingPacket; import org.geysermc.geyser.entity.EntityDefinition; import org.geysermc.geyser.level.PaintingType; -import org.geysermc.geyser.network.GameProtocol; import org.geysermc.geyser.session.GeyserSession; import org.geysermc.geyser.session.cache.registry.JavaRegistries; import org.geysermc.mcprotocollib.protocol.data.game.Holder; @@ -79,10 +78,6 @@ public class PaintingEntity extends HangingEntity { return; } - if (type == PaintingType.DENNIS && !GameProtocol.is1_21_90orHigher(session)) { - type = PaintingType.TIDES; - } - AddPaintingPacket addPaintingPacket = new AddPaintingPacket(); addPaintingPacket.setUniqueEntityId(geyserId); addPaintingPacket.setRuntimeEntityId(geyserId); diff --git a/core/src/main/java/org/geysermc/geyser/inventory/holder/BlockInventoryHolder.java b/core/src/main/java/org/geysermc/geyser/inventory/holder/BlockInventoryHolder.java index aac51a225..67ed59680 100644 --- a/core/src/main/java/org/geysermc/geyser/inventory/holder/BlockInventoryHolder.java +++ b/core/src/main/java/org/geysermc/geyser/inventory/holder/BlockInventoryHolder.java @@ -134,7 +134,7 @@ public class BlockInventoryHolder extends InventoryHolder { // and the bedrock block is vanilla BlockState state = session.getGeyser().getWorldManager().blockAt(session, session.getLastInteractionBlockPosition()); if (!BlockRegistries.CUSTOM_BLOCK_STATE_OVERRIDES.get().containsKey(state.javaId())) { - if (isValidBlock(state)) { + if (isValidBlock(session, session.getLastInteractionBlockPosition(), state)) { // We can safely use this block container.setHolderPosition(session.getLastInteractionBlockPosition()); container.setUsingRealBlock(true, state.block()); @@ -161,7 +161,7 @@ public class BlockInventoryHolder extends InventoryHolder { /** * @return true if this Java block ID can be used for player inventory. */ - protected boolean isValidBlock(BlockState blockState) { + protected boolean isValidBlock(GeyserSession session, Vector3i position, BlockState blockState) { return this.validBlocks.contains(blockState.block()); } diff --git a/core/src/main/java/org/geysermc/geyser/network/GameProtocol.java b/core/src/main/java/org/geysermc/geyser/network/GameProtocol.java index f215a6733..0b6fd0158 100644 --- a/core/src/main/java/org/geysermc/geyser/network/GameProtocol.java +++ b/core/src/main/java/org/geysermc/geyser/network/GameProtocol.java @@ -29,11 +29,10 @@ import it.unimi.dsi.fastutil.ints.IntArrayList; import it.unimi.dsi.fastutil.ints.IntList; import org.checkerframework.checker.nullness.qual.Nullable; import org.cloudburstmc.protocol.bedrock.codec.BedrockCodec; -import org.cloudburstmc.protocol.bedrock.codec.v786.Bedrock_v786; -import org.cloudburstmc.protocol.bedrock.codec.v800.Bedrock_v800; import org.cloudburstmc.protocol.bedrock.codec.v818.Bedrock_v818; import org.cloudburstmc.protocol.bedrock.codec.v819.Bedrock_v819; import org.cloudburstmc.protocol.bedrock.codec.v827.Bedrock_v827; +import org.cloudburstmc.protocol.bedrock.codec.v844.Bedrock_v844; import org.cloudburstmc.protocol.bedrock.netty.codec.packet.BedrockPacketCodec; import org.geysermc.geyser.api.util.MinecraftVersion; import org.geysermc.geyser.impl.MinecraftVersionImpl; @@ -84,11 +83,10 @@ public final class GameProtocol { static { // Strict ordering - register(Bedrock_v786.CODEC, "1.21.70", "1.21.71", "1.21.72", "1.21.73"); - register(Bedrock_v800.CODEC, "1.21.80", "1.21.81", "1.21.82", "1.21.83", "1.21.84"); register(Bedrock_v818.CODEC, "1.21.90", "1.21.91", "1.21.92"); register(Bedrock_v819.CODEC, "1.21.93", "1.21.94"); register(Bedrock_v827.CODEC, "1.21.100", "1.21.101"); + register(Bedrock_v844.CODEC, "1.21.110"); MinecraftVersion latestBedrock = SUPPORTED_BEDROCK_VERSIONS.get(SUPPORTED_BEDROCK_VERSIONS.size() - 1); DEFAULT_BEDROCK_VERSION = latestBedrock.versionString(); @@ -140,20 +138,8 @@ public final class GameProtocol { /* Bedrock convenience methods to gatekeep features and easily remove the check on version removal */ - public static boolean isTheOneVersionWithBrokenForms(GeyserSession session) { - return session.protocolVersion() == Bedrock_v786.CODEC.getProtocolVersion(); - } - - public static boolean is1_21_80orHigher(GeyserSession session) { - return session.protocolVersion() >= Bedrock_v800.CODEC.getProtocolVersion(); - } - - public static boolean is1_21_90orHigher(GeyserSession session) { - return session.protocolVersion() >= Bedrock_v818.CODEC.getProtocolVersion(); - } - - public static boolean is1_21_80(GeyserSession session) { - return session.protocolVersion() == Bedrock_v800.CODEC.getProtocolVersion(); + public static boolean is1_21_110orHigher(GeyserSession session) { + return session.protocolVersion() >= Bedrock_v844.CODEC.getProtocolVersion(); } /** diff --git a/core/src/main/java/org/geysermc/geyser/network/UpstreamPacketHandler.java b/core/src/main/java/org/geysermc/geyser/network/UpstreamPacketHandler.java index 440b85c3f..4154164be 100644 --- a/core/src/main/java/org/geysermc/geyser/network/UpstreamPacketHandler.java +++ b/core/src/main/java/org/geysermc/geyser/network/UpstreamPacketHandler.java @@ -30,7 +30,6 @@ import org.cloudburstmc.math.vector.Vector2f; import org.cloudburstmc.protocol.bedrock.BedrockDisconnectReasons; import org.cloudburstmc.protocol.bedrock.codec.BedrockCodec; import org.cloudburstmc.protocol.bedrock.codec.compat.BedrockCompat; -import org.cloudburstmc.protocol.bedrock.data.ExperimentData; import org.cloudburstmc.protocol.bedrock.data.PacketCompressionAlgorithm; import org.cloudburstmc.protocol.bedrock.data.ResourcePackType; import org.cloudburstmc.protocol.bedrock.netty.codec.compression.CompressionStrategy; @@ -151,14 +150,14 @@ public class UpstreamPacketHandler extends LoggingPacketHandler { } @Override - public void onDisconnect(String reason) { + public void onDisconnect(CharSequence reason) { // Use our own disconnect messages for these reasons - if (BedrockDisconnectReasons.CLOSED.equals(reason)) { + if (BedrockDisconnectReasons.CLOSED.contentEquals(reason)) { this.session.getUpstream().getSession().setDisconnectReason(GeyserLocale.getLocaleStringLog("geyser.network.disconnect.closed_by_remote_peer")); - } else if (BedrockDisconnectReasons.TIMEOUT.equals(reason)) { + } else if (BedrockDisconnectReasons.TIMEOUT.contentEquals(reason)) { this.session.getUpstream().getSession().setDisconnectReason(GeyserLocale.getLocaleStringLog("geyser.network.disconnect.timed_out")); } - this.session.disconnect(this.session.getUpstream().getSession().getDisconnectReason()); + this.session.disconnect(this.session.getUpstream().getSession().getDisconnectReason().toString()); } @Override @@ -288,17 +287,6 @@ public class UpstreamPacketHandler extends LoggingPacketHandler { stackPacket.setForcedToAccept(false); // Leaving this as false allows the player to choose to download or not stackPacket.setGameVersion(session.getClientData().getGameVersion()); stackPacket.getResourcePacks().addAll(this.resourcePackLoadEvent.orderedPacks()); - // Allows Vibrant Visuals to be toggled in the settings - if (session.isAllowVibrantVisuals() && !GameProtocol.is1_21_90orHigher(session)) { - stackPacket.getExperiments().add(new ExperimentData("experimental_graphics", true)); - } - - if (GameProtocol.is1_21_80(session)) { - // Support happy ghasts in .80 - stackPacket.getExperiments().add(new ExperimentData("y_2025_drop_2", true)); - // Enables the locator bar for 1.21.80 clients - stackPacket.getExperiments().add(new ExperimentData("locator_bar", true)); - } session.sendUpstreamPacket(stackPacket); } diff --git a/core/src/main/java/org/geysermc/geyser/registry/populator/BlockRegistryPopulator.java b/core/src/main/java/org/geysermc/geyser/registry/populator/BlockRegistryPopulator.java index 007bc889c..0e72eaecc 100644 --- a/core/src/main/java/org/geysermc/geyser/registry/populator/BlockRegistryPopulator.java +++ b/core/src/main/java/org/geysermc/geyser/registry/populator/BlockRegistryPopulator.java @@ -43,11 +43,10 @@ import org.cloudburstmc.nbt.NbtMap; import org.cloudburstmc.nbt.NbtMapBuilder; import org.cloudburstmc.nbt.NbtType; import org.cloudburstmc.nbt.NbtUtils; -import org.cloudburstmc.protocol.bedrock.codec.v786.Bedrock_v786; -import org.cloudburstmc.protocol.bedrock.codec.v800.Bedrock_v800; import org.cloudburstmc.protocol.bedrock.codec.v818.Bedrock_v818; import org.cloudburstmc.protocol.bedrock.codec.v819.Bedrock_v819; import org.cloudburstmc.protocol.bedrock.codec.v827.Bedrock_v827; +import org.cloudburstmc.protocol.bedrock.codec.v844.Bedrock_v844; import org.cloudburstmc.protocol.bedrock.data.BlockPropertyData; import org.cloudburstmc.protocol.bedrock.data.definitions.BlockDefinition; import org.geysermc.geyser.GeyserImpl; @@ -60,7 +59,7 @@ import org.geysermc.geyser.level.block.type.Block; import org.geysermc.geyser.level.block.type.BlockState; import org.geysermc.geyser.level.block.type.FlowerPotBlock; import org.geysermc.geyser.registry.BlockRegistries; -import org.geysermc.geyser.registry.populator.conversion.Conversion800_786; +import org.geysermc.geyser.registry.populator.conversion.Conversion844_827; import org.geysermc.geyser.registry.type.BlockMappings; import org.geysermc.geyser.registry.type.GeyserBedrockBlock; @@ -120,11 +119,10 @@ public final class BlockRegistryPopulator { private static void registerBedrockBlocks() { var blockMappers = ImmutableMap., Remapper>builder() - .put(ObjectIntPair.of("1_21_70", Bedrock_v786.CODEC.getProtocolVersion()), Conversion800_786::remapBlock) - .put(ObjectIntPair.of("1_21_80", Bedrock_v800.CODEC.getProtocolVersion()), tag -> tag) - .put(ObjectIntPair.of("1_21_90", Bedrock_v818.CODEC.getProtocolVersion()), tag -> tag) - .put(ObjectIntPair.of("1_21_90", Bedrock_v819.CODEC.getProtocolVersion()), tag -> tag) - .put(ObjectIntPair.of("1_21_100", Bedrock_v827.CODEC.getProtocolVersion()), tag -> tag) + .put(ObjectIntPair.of("1_21_90", Bedrock_v818.CODEC.getProtocolVersion()), Conversion844_827::remapBlock) + .put(ObjectIntPair.of("1_21_90", Bedrock_v819.CODEC.getProtocolVersion()), Conversion844_827::remapBlock) + .put(ObjectIntPair.of("1_21_100", Bedrock_v827.CODEC.getProtocolVersion()), Conversion844_827::remapBlock) + .put(ObjectIntPair.of("1_21_110", Bedrock_v844.CODEC.getProtocolVersion()), tag -> tag) .build(); // We can keep this strong as nothing should be garbage collected diff --git a/core/src/main/java/org/geysermc/geyser/registry/populator/ItemRegistryPopulator.java b/core/src/main/java/org/geysermc/geyser/registry/populator/ItemRegistryPopulator.java index 8c509f2b1..e8fe6969b 100644 --- a/core/src/main/java/org/geysermc/geyser/registry/populator/ItemRegistryPopulator.java +++ b/core/src/main/java/org/geysermc/geyser/registry/populator/ItemRegistryPopulator.java @@ -45,11 +45,10 @@ import org.cloudburstmc.nbt.NbtMap; import org.cloudburstmc.nbt.NbtMapBuilder; import org.cloudburstmc.nbt.NbtType; import org.cloudburstmc.nbt.NbtUtils; -import org.cloudburstmc.protocol.bedrock.codec.v786.Bedrock_v786; -import org.cloudburstmc.protocol.bedrock.codec.v800.Bedrock_v800; import org.cloudburstmc.protocol.bedrock.codec.v818.Bedrock_v818; import org.cloudburstmc.protocol.bedrock.codec.v819.Bedrock_v819; import org.cloudburstmc.protocol.bedrock.codec.v827.Bedrock_v827; +import org.cloudburstmc.protocol.bedrock.codec.v844.Bedrock_v844; import org.cloudburstmc.protocol.bedrock.data.definitions.BlockDefinition; import org.cloudburstmc.protocol.bedrock.data.definitions.ItemDefinition; import org.cloudburstmc.protocol.bedrock.data.definitions.SimpleItemDefinition; @@ -74,6 +73,7 @@ import org.geysermc.geyser.item.type.Item; import org.geysermc.geyser.level.block.property.Properties; import org.geysermc.geyser.registry.BlockRegistries; import org.geysermc.geyser.registry.Registries; +import org.geysermc.geyser.registry.populator.conversion.Conversion844_827; import org.geysermc.geyser.registry.type.BlockMappings; import org.geysermc.geyser.registry.type.GeyserBedrockBlock; import org.geysermc.geyser.registry.type.GeyserMappingItem; @@ -86,7 +86,6 @@ import java.io.InputStream; import java.util.ArrayList; import java.util.Collection; import java.util.Collections; -import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.Objects; @@ -107,6 +106,10 @@ public class ItemRegistryPopulator { public PaletteVersion(String version, int protocolVersion, Map javaOnlyItems) { this(version, protocolVersion, javaOnlyItems, (item, mapping) -> mapping); } + + public PaletteVersion(String version, int protocolVersion, Remapper remapper) { + this(version, protocolVersion, Collections.emptyMap(), remapper); + } } @FunctionalInterface @@ -116,39 +119,11 @@ public class ItemRegistryPopulator { } public static void populate() { - // Fallbacks for 1.21.6 items (1.21.6 -> 1.21.5) - Map itemFallbacks = new HashMap<>(); - itemFallbacks.put(Items.BLACK_HARNESS, Items.SADDLE); - itemFallbacks.put(Items.BLUE_HARNESS, Items.SADDLE); - itemFallbacks.put(Items.BROWN_HARNESS, Items.SADDLE); - itemFallbacks.put(Items.RED_HARNESS, Items.SADDLE); - itemFallbacks.put(Items.GREEN_HARNESS, Items.SADDLE); - itemFallbacks.put(Items.YELLOW_HARNESS, Items.SADDLE); - itemFallbacks.put(Items.ORANGE_HARNESS, Items.SADDLE); - itemFallbacks.put(Items.MAGENTA_HARNESS, Items.SADDLE); - itemFallbacks.put(Items.LIGHT_BLUE_HARNESS, Items.SADDLE); - itemFallbacks.put(Items.LIME_HARNESS, Items.SADDLE); - itemFallbacks.put(Items.PINK_HARNESS, Items.SADDLE); - itemFallbacks.put(Items.GRAY_HARNESS, Items.SADDLE); - itemFallbacks.put(Items.CYAN_HARNESS, Items.SADDLE); - itemFallbacks.put(Items.PURPLE_HARNESS, Items.SADDLE); - itemFallbacks.put(Items.LIGHT_GRAY_HARNESS, Items.SADDLE); - itemFallbacks.put(Items.WHITE_HARNESS, Items.SADDLE); - itemFallbacks.put(Items.HAPPY_GHAST_SPAWN_EGG, Items.EGG); - itemFallbacks.put(Items.DRIED_GHAST, Items.PLAYER_HEAD); - itemFallbacks.put(Items.MUSIC_DISC_TEARS, Items.MUSIC_DISC_5); - itemFallbacks.put(Items.MUSIC_DISC_LAVA_CHICKEN, Items.MUSIC_DISC_CHIRP); - - Map fallbacks1_21_80 = new HashMap<>(); - fallbacks1_21_80.put(Items.MUSIC_DISC_LAVA_CHICKEN, Items.MUSIC_DISC_CHIRP); - fallbacks1_21_80.put(Items.MUSIC_DISC_TEARS, Items.MUSIC_DISC_5); - - List paletteVersions = new ArrayList<>(4); - paletteVersions.add(new PaletteVersion("1_21_70", Bedrock_v786.CODEC.getProtocolVersion(), itemFallbacks)); - paletteVersions.add(new PaletteVersion("1_21_80", Bedrock_v800.CODEC.getProtocolVersion(), fallbacks1_21_80)); - paletteVersions.add(new PaletteVersion("1_21_90", Bedrock_v818.CODEC.getProtocolVersion(), Map.of(Items.MUSIC_DISC_LAVA_CHICKEN, Items.MUSIC_DISC_CHIRP))); - paletteVersions.add(new PaletteVersion("1_21_93", Bedrock_v819.CODEC.getProtocolVersion())); - paletteVersions.add(new PaletteVersion("1_21_100", Bedrock_v827.CODEC.getProtocolVersion())); + List paletteVersions = new ArrayList<>(6); + paletteVersions.add(new PaletteVersion("1_21_90", Bedrock_v818.CODEC.getProtocolVersion(), Map.of(Items.MUSIC_DISC_LAVA_CHICKEN, Items.MUSIC_DISC_CHIRP), Conversion844_827::remapItem)); + paletteVersions.add(new PaletteVersion("1_21_93", Bedrock_v819.CODEC.getProtocolVersion(), Conversion844_827::remapItem)); + paletteVersions.add(new PaletteVersion("1_21_100", Bedrock_v827.CODEC.getProtocolVersion(), Conversion844_827::remapItem)); + paletteVersions.add(new PaletteVersion("1_21_110", Bedrock_v844.CODEC.getProtocolVersion())); GeyserBootstrap bootstrap = GeyserImpl.getInstance().getBootstrap(); diff --git a/core/src/main/java/org/geysermc/geyser/registry/populator/TagRegistryPopulator.java b/core/src/main/java/org/geysermc/geyser/registry/populator/TagRegistryPopulator.java index aa8f42f9a..a27a83176 100644 --- a/core/src/main/java/org/geysermc/geyser/registry/populator/TagRegistryPopulator.java +++ b/core/src/main/java/org/geysermc/geyser/registry/populator/TagRegistryPopulator.java @@ -33,9 +33,10 @@ import it.unimi.dsi.fastutil.ints.IntArrayList; import it.unimi.dsi.fastutil.ints.IntList; import it.unimi.dsi.fastutil.objects.Object2ObjectOpenCustomHashMap; import it.unimi.dsi.fastutil.objects.ObjectIntPair; -import org.cloudburstmc.protocol.bedrock.codec.v786.Bedrock_v786; -import org.cloudburstmc.protocol.bedrock.codec.v800.Bedrock_v800; import org.cloudburstmc.protocol.bedrock.codec.v818.Bedrock_v818; +import org.cloudburstmc.protocol.bedrock.codec.v819.Bedrock_v819; +import org.cloudburstmc.protocol.bedrock.codec.v827.Bedrock_v827; +import org.cloudburstmc.protocol.bedrock.codec.v844.Bedrock_v844; import org.geysermc.geyser.GeyserBootstrap; import org.geysermc.geyser.GeyserImpl; import org.geysermc.geyser.item.type.Item; @@ -68,10 +69,11 @@ public final class TagRegistryPopulator { }; List> paletteVersions = List.of( - ObjectIntPair.of("1_21_70", Bedrock_v786.CODEC.getProtocolVersion()), - // Not a typo, they're the same file - ObjectIntPair.of("1_21_70", Bedrock_v800.CODEC.getProtocolVersion()), - ObjectIntPair.of("1_21_70", Bedrock_v818.CODEC.getProtocolVersion()) + ObjectIntPair.of("1_21_90", Bedrock_v818.CODEC.getProtocolVersion()), + // Not a typo, it's the same file + ObjectIntPair.of("1_21_90", Bedrock_v819.CODEC.getProtocolVersion()), + ObjectIntPair.of("1_21_100", Bedrock_v827.CODEC.getProtocolVersion()), + ObjectIntPair.of("1_21_110", Bedrock_v844.CODEC.getProtocolVersion()) ); Type type = new TypeToken>>() {}.getType(); diff --git a/core/src/main/java/org/geysermc/geyser/registry/populator/conversion/Conversion800_786.java b/core/src/main/java/org/geysermc/geyser/registry/populator/conversion/Conversion844_827.java similarity index 61% rename from core/src/main/java/org/geysermc/geyser/registry/populator/conversion/Conversion800_786.java rename to core/src/main/java/org/geysermc/geyser/registry/populator/conversion/Conversion844_827.java index 034424445..7f6eddfe7 100644 --- a/core/src/main/java/org/geysermc/geyser/registry/populator/conversion/Conversion800_786.java +++ b/core/src/main/java/org/geysermc/geyser/registry/populator/conversion/Conversion844_827.java @@ -26,16 +26,32 @@ package org.geysermc.geyser.registry.populator.conversion; import org.cloudburstmc.nbt.NbtMap; +import org.cloudburstmc.nbt.NbtMapBuilder; +import org.geysermc.geyser.item.Items; +import org.geysermc.geyser.item.type.Item; +import org.geysermc.geyser.registry.type.GeyserMappingItem; -public class Conversion800_786 { +public class Conversion844_827 { public static NbtMap remapBlock(NbtMap nbtMap) { - final String name = nbtMap.getString("name"); - if (name.equals("minecraft:dried_ghast")) { - return ConversionHelper.withoutStates("unknown"); + if (name.equals("minecraft:iron_chain")) { + return ConversionHelper.withName(nbtMap, "chain"); + } else if (name.equals("minecraft:lightning_rod")) { + NbtMapBuilder statesWithoutPoweredBit = nbtMap.getCompound("states").toBuilder(); + statesWithoutPoweredBit.remove("powered_bit"); + return nbtMap.toBuilder() + .putCompound("states", statesWithoutPoweredBit.build()) + .build(); } return nbtMap; } + + public static GeyserMappingItem remapItem(Item item, GeyserMappingItem mapping) { + if (item == Items.CHAIN) { + return mapping.withBedrockIdentifier("minecraft:chain"); + } + return mapping; + } } diff --git a/core/src/main/java/org/geysermc/geyser/session/GeyserSession.java b/core/src/main/java/org/geysermc/geyser/session/GeyserSession.java index d54c045db..9c37b12bb 100644 --- a/core/src/main/java/org/geysermc/geyser/session/GeyserSession.java +++ b/core/src/main/java/org/geysermc/geyser/session/GeyserSession.java @@ -155,7 +155,6 @@ import org.geysermc.geyser.item.type.BlockItem; import org.geysermc.geyser.level.BedrockDimension; import org.geysermc.geyser.level.JavaDimension; import org.geysermc.geyser.level.physics.CollisionManager; -import org.geysermc.geyser.network.GameProtocol; import org.geysermc.geyser.network.netty.LocalSession; import org.geysermc.geyser.registry.Registries; import org.geysermc.geyser.registry.type.BlockMappings; @@ -836,15 +835,9 @@ public class GeyserSession implements GeyserConnection, GeyserCommandSource { ChunkUtils.sendEmptyChunks(this, playerEntity.getPosition().toInt(), 0, false); - if (GameProtocol.is1_21_80orHigher(this)) { - BiomeDefinitionListPacket biomeDefinitionListPacket = new BiomeDefinitionListPacket(); - biomeDefinitionListPacket.setBiomes(Registries.BIOMES.get()); - upstream.sendPacket(biomeDefinitionListPacket); - } else { - BiomeDefinitionListPacket biomeDefinitionListPacket = new BiomeDefinitionListPacket(); - biomeDefinitionListPacket.setDefinitions(Registries.BIOMES_NBT.get()); - upstream.sendPacket(biomeDefinitionListPacket); - } + BiomeDefinitionListPacket biomeDefinitionListPacket = new BiomeDefinitionListPacket(); + biomeDefinitionListPacket.setBiomes(Registries.BIOMES.get()); + upstream.sendPacket(biomeDefinitionListPacket); AvailableEntityIdentifiersPacket entityPacket = new AvailableEntityIdentifiersPacket(); entityPacket.setIdentifiers(Registries.BEDROCK_ENTITY_IDENTIFIERS.get()); @@ -1801,16 +1794,6 @@ public class GeyserSession implements GeyserConnection, GeyserCommandSource { startGamePacket.getExperiments().add(new ExperimentData("upcoming_creator_features", true)); // Needed for certain molang queries used in blocks and items startGamePacket.getExperiments().add(new ExperimentData("experimental_molang_features", true)); - // Allows Vibrant Visuals to appear in the settings menu - if (allowVibrantVisuals && !GameProtocol.is1_21_90orHigher(this)) { - startGamePacket.getExperiments().add(new ExperimentData("experimental_graphics", true)); - } - // Enables 2025 Content Drop 2 features - if (GameProtocol.is1_21_80(this)) { - startGamePacket.getExperiments().add(new ExperimentData("y_2025_drop_2", true)); - // Enables the locator bar for 1.21.80 clients - startGamePacket.getExperiments().add(new ExperimentData("locator_bar", true)); - } startGamePacket.setVanillaVersion("*"); startGamePacket.setInventoriesServerAuthoritative(true); diff --git a/core/src/main/java/org/geysermc/geyser/session/cache/FormCache.java b/core/src/main/java/org/geysermc/geyser/session/cache/FormCache.java index 3fadc01bd..7dabf2a1d 100644 --- a/core/src/main/java/org/geysermc/geyser/session/cache/FormCache.java +++ b/core/src/main/java/org/geysermc/geyser/session/cache/FormCache.java @@ -25,34 +25,23 @@ package org.geysermc.geyser.session.cache; -import com.google.gson.Gson; -import com.google.gson.JsonArray; import it.unimi.dsi.fastutil.ints.Int2ObjectMap; import it.unimi.dsi.fastutil.ints.Int2ObjectOpenHashMap; -import it.unimi.dsi.fastutil.ints.IntArrayList; -import it.unimi.dsi.fastutil.ints.IntList; import lombok.RequiredArgsConstructor; import org.cloudburstmc.protocol.bedrock.packet.ModalFormRequestPacket; import org.cloudburstmc.protocol.bedrock.packet.ModalFormResponsePacket; import org.cloudburstmc.protocol.bedrock.packet.NetworkStackLatencyPacket; -import org.geysermc.cumulus.component.util.ComponentType; -import org.geysermc.cumulus.form.CustomForm; import org.geysermc.cumulus.form.Form; import org.geysermc.cumulus.form.SimpleForm; import org.geysermc.cumulus.form.impl.FormDefinitions; import org.geysermc.geyser.GeyserImpl; -import org.geysermc.geyser.network.GameProtocol; import org.geysermc.geyser.session.GeyserSession; -import java.util.ArrayList; -import java.util.List; import java.util.concurrent.TimeUnit; import java.util.concurrent.atomic.AtomicInteger; @RequiredArgsConstructor public class FormCache { - private static final Gson GSON_TEMP = new Gson(); - /** * The magnitude of this doesn't actually matter, but it must be negative so that * BedrockNetworkStackLatencyTranslator can detect the hack. @@ -114,50 +103,9 @@ public class FormCache { return; } - String responseData = response.getFormData(); - // TODO drop once 1.21.70 is no longer supported - if (form instanceof CustomForm customForm && GameProtocol.isTheOneVersionWithBrokenForms(session) && response.getCancelReason().isEmpty()) { - // Labels are no longer included as a json null, so we have to manually add them for now. - IntList labelIndexes = new IntArrayList(); - for (int i = 0; i < customForm.content().size(); i++) { - var component = customForm.content().get(i); - if (component == null) { - continue; - } - if (component.type() == ComponentType.LABEL) { - labelIndexes.add(i); - } - } - if (!labelIndexes.isEmpty()) { - // If the form only has labels, the response is the literal - // null (with a newline char) instead of a json array - if (responseData.startsWith("null")) { - List newResponse = new ArrayList<>(); - for (int i = 0; i < labelIndexes.size(); i++) { - newResponse.add(null); - } - responseData = GSON_TEMP.toJson(newResponse); - } else { - JsonArray responseDataArray = GSON_TEMP.fromJson(responseData, JsonArray.class); - List newResponse = new ArrayList<>(); - - int handledLabelCount = 0; - for (int i = 0; i < responseDataArray.size() + labelIndexes.size(); i++) { - if (labelIndexes.contains(i)) { - newResponse.add(null); - handledLabelCount++; - continue; - } - newResponse.add(responseDataArray.get(i - handledLabelCount)); - } - responseData = GSON_TEMP.toJson(newResponse); - } - } - } - try { formDefinitions.definitionFor(form) - .handleFormResponse(form, responseData); + .handleFormResponse(form, response.getFormData()); } catch (Exception e) { GeyserImpl.getInstance().getLogger().error("Error while processing form response!", e); } diff --git a/core/src/main/java/org/geysermc/geyser/translator/inventory/ShulkerInventoryTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/inventory/ShulkerInventoryTranslator.java index a8adde806..d230e1dc0 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/inventory/ShulkerInventoryTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/inventory/ShulkerInventoryTranslator.java @@ -53,7 +53,7 @@ public class ShulkerInventoryTranslator extends AbstractBlockInventoryTranslator private final BlockEntityTranslator shulkerBoxTranslator = Registries.BLOCK_ENTITIES.get(BlockEntityType.SHULKER_BOX); @Override - protected boolean isValidBlock(BlockState blockState) { + protected boolean isValidBlock(GeyserSession session, Vector3i position, BlockState blockState) { return blockState.block().javaIdentifier().value().contains("shulker_box"); // TODO ew } diff --git a/core/src/main/java/org/geysermc/geyser/translator/inventory/chest/SingleChestInventoryTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/inventory/chest/SingleChestInventoryTranslator.java index 74b228e70..84194d4fa 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/inventory/chest/SingleChestInventoryTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/inventory/chest/SingleChestInventoryTranslator.java @@ -25,8 +25,10 @@ package org.geysermc.geyser.translator.inventory.chest; +import org.cloudburstmc.math.vector.Vector3i; import org.cloudburstmc.protocol.bedrock.data.inventory.ContainerSlotType; import org.cloudburstmc.protocol.bedrock.data.inventory.ContainerType; +import org.geysermc.geyser.GeyserImpl; import org.geysermc.geyser.inventory.Generic9X3Container; import org.geysermc.geyser.inventory.holder.BlockInventoryHolder; import org.geysermc.geyser.inventory.holder.InventoryHolder; @@ -34,6 +36,9 @@ import org.geysermc.geyser.level.block.Blocks; import org.geysermc.geyser.level.block.property.ChestType; import org.geysermc.geyser.level.block.property.Properties; import org.geysermc.geyser.level.block.type.BlockState; +import org.geysermc.geyser.level.physics.Axis; +import org.geysermc.geyser.level.physics.Direction; +import org.geysermc.geyser.network.GameProtocol; import org.geysermc.geyser.session.GeyserSession; public class SingleChestInventoryTranslator extends ChestInventoryTranslator { @@ -44,14 +49,34 @@ public class SingleChestInventoryTranslator extends ChestInventoryTranslator session.setCrawling(false); case START_SPRINTING -> { if (!leftOverInputData.contains(PlayerAuthInputData.STOP_SPRINTING)) { - // Check if the player is standing on but not surrounded by water; don't allow sprinting in that case - // resolves - if (!GameProtocol.is1_21_80orHigher(session) && session.getCollisionManager().isPlayerTouchingWater() && !session.getCollisionManager().isPlayerInWater()) { - // Update movement speed attribute to prevent sprinting on water. This is fixed in 1.21.80+ natively. - UpdateAttributesPacket attributesPacket = new UpdateAttributesPacket(); - attributesPacket.setRuntimeEntityId(entity.getGeyserId()); - attributesPacket.getAttributes().addAll(entity.getAttributes().values()); - session.sendUpstreamPacket(attributesPacket); - } else { - if (!session.isSprinting()) { - sprintPacket = new ServerboundPlayerCommandPacket(entity.javaId(), PlayerState.START_SPRINTING); - session.setSprinting(true); - } + if (!session.isSprinting()) { + sprintPacket = new ServerboundPlayerCommandPacket(entity.javaId(), PlayerState.START_SPRINTING); + session.setSprinting(true); } } } diff --git a/core/src/main/resources/bedrock/block_palette.1_21_110.nbt b/core/src/main/resources/bedrock/block_palette.1_21_110.nbt new file mode 100644 index 0000000000000000000000000000000000000000..e89f50aec380efc44cd83e5c390c7b2d2ff9676b GIT binary patch literal 202128 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²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 z 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