diff --git a/README.md b/README.md index 1b1e7b380..56dc74761 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.90 - 1.21.114 and Minecraft Java 1.21.9 - 1.21.10. For more information, please see [here](https://geysermc.org/wiki/geyser/supported-versions/). +Geyser is currently supporting Minecraft Bedrock 1.21.90 - 1.21.120 and Minecraft Java 1.21.9 - 1.21.10. 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/network/GameProtocol.java b/core/src/main/java/org/geysermc/geyser/network/GameProtocol.java index a6679c1fd..80737a5a5 100644 --- a/core/src/main/java/org/geysermc/geyser/network/GameProtocol.java +++ b/core/src/main/java/org/geysermc/geyser/network/GameProtocol.java @@ -33,6 +33,7 @@ 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.codec.v859.Bedrock_v859; import org.cloudburstmc.protocol.bedrock.netty.codec.packet.BedrockPacketCodec; import org.geysermc.geyser.api.util.MinecraftVersion; import org.geysermc.geyser.impl.MinecraftVersionImpl; @@ -87,6 +88,7 @@ public final class GameProtocol { 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.111", "1.21.112", "1.21.113", "1.21.114"); + register(Bedrock_v859.CODEC, "1.21.120"); MinecraftVersion latestBedrock = SUPPORTED_BEDROCK_VERSIONS.get(SUPPORTED_BEDROCK_VERSIONS.size() - 1); DEFAULT_BEDROCK_VERSION = latestBedrock.versionString(); diff --git a/core/src/main/java/org/geysermc/geyser/network/LoggingPacketHandler.java b/core/src/main/java/org/geysermc/geyser/network/LoggingPacketHandler.java index 39c3f5aa9..8fc409a24 100644 --- a/core/src/main/java/org/geysermc/geyser/network/LoggingPacketHandler.java +++ b/core/src/main/java/org/geysermc/geyser/network/LoggingPacketHandler.java @@ -125,11 +125,6 @@ public class LoggingPacketHandler implements BedrockPacketHandler { return defaultHandler(packet); } - @Override - public PacketSignal handle(CraftingEventPacket packet) { - return defaultHandler(packet); - } - @Override public PacketSignal handle(EntityEventPacket packet) { return defaultHandler(packet); @@ -165,11 +160,6 @@ public class LoggingPacketHandler implements BedrockPacketHandler { return defaultHandler(packet); } - @Override - public PacketSignal handle(ItemFrameDropItemPacket packet) { - return defaultHandler(packet); - } - @Override public PacketSignal handle(LabTablePacket packet) { return defaultHandler(packet); 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 a8aa29106..f287a4a7a 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 @@ -33,6 +33,7 @@ import com.google.common.collect.Interners; 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.objects.Object2IntMap; import it.unimi.dsi.fastutil.objects.Object2ObjectMap; import it.unimi.dsi.fastutil.objects.Object2ObjectMaps; import it.unimi.dsi.fastutil.objects.Object2ObjectOpenHashMap; @@ -47,6 +48,7 @@ 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.codec.v859.Bedrock_v859; import org.cloudburstmc.protocol.bedrock.data.BlockPropertyData; import org.cloudburstmc.protocol.bedrock.data.definitions.BlockDefinition; import org.geysermc.geyser.GeyserImpl; @@ -124,6 +126,7 @@ public final class BlockRegistryPopulator { .put(ObjectIntPair.of("1_21_90", Bedrock_v819.CODEC.getProtocolVersion()), Conversion827_819::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) + .put(ObjectIntPair.of("1_21_110", Bedrock_v859.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 f90673389..5fb3590e2 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 @@ -49,6 +49,7 @@ 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.codec.v859.Bedrock_v859; import org.cloudburstmc.protocol.bedrock.data.definitions.BlockDefinition; import org.cloudburstmc.protocol.bedrock.data.definitions.ItemDefinition; import org.cloudburstmc.protocol.bedrock.data.definitions.SimpleItemDefinition; @@ -196,6 +197,7 @@ public class ItemRegistryPopulator { paletteVersions.add(new PaletteVersion("1_21_93", Bedrock_v819.CODEC.getProtocolVersion(), eightOneNineFallbacks, Conversion844_827::remapItem)); paletteVersions.add(new PaletteVersion("1_21_100", Bedrock_v827.CODEC.getProtocolVersion(), eightTwoSevenFallbacks, Conversion844_827::remapItem)); paletteVersions.add(new PaletteVersion("1_21_110", Bedrock_v844.CODEC.getProtocolVersion())); + paletteVersions.add(new PaletteVersion("1_21_120", Bedrock_v859.CODEC.getProtocolVersion())); GeyserBootstrap bootstrap = GeyserImpl.getInstance().getBootstrap(); @@ -209,13 +211,6 @@ public class ItemRegistryPopulator { throw new AssertionError("Unable to load Java runtime item IDs", e); } - NbtMap vanillaComponents; - try (InputStream stream = bootstrap.getResourceOrThrow("bedrock/item_components.nbt")) { - vanillaComponents = (NbtMap) NbtUtils.createGZIPReader(stream, true, true).readTag(); - } catch (Exception e) { - throw new AssertionError("Unable to load Bedrock item components", e); - } - boolean customItemsAllowed = GeyserImpl.getInstance().getConfig().isAddNonBedrockItems(); // List values here is important compared to HashSet - we need to preserve the order of what's given to us @@ -242,6 +237,13 @@ public class ItemRegistryPopulator { throw new AssertionError("Unable to load Bedrock runtime item IDs", e); } + NbtMap vanillaComponents; + try (InputStream stream = bootstrap.getResourceOrThrow("bedrock/item_components.%s.nbt".formatted(palette.version()))) { + vanillaComponents = (NbtMap) NbtUtils.createGZIPReader(stream, true, true).readTag(); + } catch (Exception e) { + throw new AssertionError("Unable to load Bedrock item components", e); + } + // Used for custom items int nextFreeBedrockId = 0; Int2ObjectMap registry = new Int2ObjectOpenHashMap<>(); 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 e6f88ba9e..fdac156b6 100644 --- a/core/src/main/java/org/geysermc/geyser/session/GeyserSession.java +++ b/core/src/main/java/org/geysermc/geyser/session/GeyserSession.java @@ -274,6 +274,8 @@ public class GeyserSession implements GeyserConnection, GeyserCommandSource { */ @Setter private List certChainData; + @Setter + private String token; @NonNull @Setter diff --git a/core/src/main/java/org/geysermc/geyser/skin/FloodgateSkinUploader.java b/core/src/main/java/org/geysermc/geyser/skin/FloodgateSkinUploader.java index 4e4f52914..68c5d7b74 100644 --- a/core/src/main/java/org/geysermc/geyser/skin/FloodgateSkinUploader.java +++ b/core/src/main/java/org/geysermc/geyser/skin/FloodgateSkinUploader.java @@ -190,15 +190,22 @@ public final class FloodgateSkinUploader { }; } - public void uploadSkin(List chainData, String clientData) { - if (chainData == null || clientData == null) { + public void uploadSkin(GeyserSession session) { + List chainData = session.getCertChainData(); + String token = session.getToken(); + String clientData = session.getClientData().getOriginalString(); + if ((chainData == null && token == null) || clientData == null) { return; } ObjectNode node = JACKSON.createObjectNode(); - ArrayNode chainDataNode = JACKSON.createArrayNode(); - chainData.forEach(chainDataNode::add); - node.set("chain_data", chainDataNode); + if (chainData != null) { + ArrayNode chainDataNode = JACKSON.createArrayNode(); + chainData.forEach(chainDataNode::add); + node.set("chain_data", chainDataNode); + } else { + node.put("token", token); + } node.put("client_data", clientData); // The reason why I don't like Jackson @@ -218,7 +225,7 @@ public final class FloodgateSkinUploader { } private void reconnectLater(GeyserImpl geyser) { - // we ca only reconnect when the thread pool is open + // we can only reconnect when the thread pool is open if (geyser.getScheduledThread().isShutdown() || closed) { logger.info("The skin uploader has been closed"); return; @@ -241,4 +248,4 @@ public final class FloodgateSkinUploader { client.close(); } } -} \ No newline at end of file +} diff --git a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/JavaLoginFinishedTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/JavaLoginFinishedTranslator.java index 36c1ef197..2ce99e119 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/JavaLoginFinishedTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/JavaLoginFinishedTranslator.java @@ -66,11 +66,12 @@ public class JavaLoginFinishedTranslator extends PacketTranslator