From 3d78335efc329613962f9dcdd65cfc9d8d979bdd Mon Sep 17 00:00:00 2001 From: DoctorMacc Date: Tue, 8 Dec 2020 12:04:57 -0500 Subject: [PATCH 1/4] Change default protocol version to 422 --- .../connector/network/BedrockProtocol.java | 18 ++++++++---------- 1 file changed, 8 insertions(+), 10 deletions(-) diff --git a/connector/src/main/java/org/geysermc/connector/network/BedrockProtocol.java b/connector/src/main/java/org/geysermc/connector/network/BedrockProtocol.java index 0b96b5b5421..66aa1863457 100644 --- a/connector/src/main/java/org/geysermc/connector/network/BedrockProtocol.java +++ b/connector/src/main/java/org/geysermc/connector/network/BedrockProtocol.java @@ -39,22 +39,20 @@ public class BedrockProtocol { * Default Bedrock codec that should act as a fallback. Should represent the latest available * release of the game that Geyser supports. */ - public static final BedrockPacketCodec DEFAULT_BEDROCK_CODEC = Bedrock_v419.V419_CODEC; + public static final BedrockPacketCodec DEFAULT_BEDROCK_CODEC = Bedrock_v419.V419_CODEC.toBuilder() + .protocolVersion(422) + .minecraftVersion("1.16.200") + .build(); /** * A list of all supported Bedrock versions that can join Geyser */ public static final List SUPPORTED_BEDROCK_CODECS = new ArrayList<>(); static { - SUPPORTED_BEDROCK_CODECS.add(DEFAULT_BEDROCK_CODEC.toBuilder() - .minecraftVersion("1.16.100/1.16.101") // We change this as 1.16.100.60 (beta) crashes with Geyser - .build() - ); - SUPPORTED_BEDROCK_CODECS.add(DEFAULT_BEDROCK_CODEC.toBuilder() - .protocolVersion(422) - .minecraftVersion("1.16.200.56") - .build() - ); + SUPPORTED_BEDROCK_CODECS.add(Bedrock_v419.V419_CODEC.toBuilder() + .minecraftVersion("1.16.100/1.16.101") // We change this as 1.16.100.60 is a beta + .build()); + SUPPORTED_BEDROCK_CODECS.add(DEFAULT_BEDROCK_CODEC); } /** From a5c7c51c5ba7e9d6f047cfcf500b6e514665ad47 Mon Sep 17 00:00:00 2001 From: DoctorMacc Date: Tue, 8 Dec 2020 21:18:09 -0500 Subject: [PATCH 2/4] Update Protocol --- connector/pom.xml | 7 ++++--- .../org/geysermc/connector/network/BedrockProtocol.java | 6 ++---- .../geysermc/connector/network/UpstreamPacketHandler.java | 4 +++- 3 files changed, 9 insertions(+), 8 deletions(-) diff --git a/connector/pom.xml b/connector/pom.xml index 6da797b30ed..ba67b0f1e07 100644 --- a/connector/pom.xml +++ b/connector/pom.xml @@ -30,9 +30,10 @@ compile - com.github.CloudburstMC.Protocol - bedrock-v419 - ce59d39118 + + com.github.GeyserMC.Protocol + bedrock-v422 + 2149098 compile diff --git a/connector/src/main/java/org/geysermc/connector/network/BedrockProtocol.java b/connector/src/main/java/org/geysermc/connector/network/BedrockProtocol.java index 66aa1863457..91c23799d5f 100644 --- a/connector/src/main/java/org/geysermc/connector/network/BedrockProtocol.java +++ b/connector/src/main/java/org/geysermc/connector/network/BedrockProtocol.java @@ -27,6 +27,7 @@ import com.nukkitx.protocol.bedrock.BedrockPacketCodec; import com.nukkitx.protocol.bedrock.v419.Bedrock_v419; +import com.nukkitx.protocol.bedrock.v422.Bedrock_v422; import java.util.ArrayList; import java.util.List; @@ -39,10 +40,7 @@ public class BedrockProtocol { * Default Bedrock codec that should act as a fallback. Should represent the latest available * release of the game that Geyser supports. */ - public static final BedrockPacketCodec DEFAULT_BEDROCK_CODEC = Bedrock_v419.V419_CODEC.toBuilder() - .protocolVersion(422) - .minecraftVersion("1.16.200") - .build(); + public static final BedrockPacketCodec DEFAULT_BEDROCK_CODEC = Bedrock_v422.V422_CODEC; /** * A list of all supported Bedrock versions that can join Geyser */ diff --git a/connector/src/main/java/org/geysermc/connector/network/UpstreamPacketHandler.java b/connector/src/main/java/org/geysermc/connector/network/UpstreamPacketHandler.java index f4e3ca21404..23df3f16d65 100644 --- a/connector/src/main/java/org/geysermc/connector/network/UpstreamPacketHandler.java +++ b/connector/src/main/java/org/geysermc/connector/network/UpstreamPacketHandler.java @@ -82,7 +82,9 @@ public boolean handle(LoginPacket loginPacket) { ResourcePacksInfoPacket resourcePacksInfo = new ResourcePacksInfoPacket(); for(ResourcePack resourcePack : ResourcePack.PACKS.values()) { ResourcePackManifest.Header header = resourcePack.getManifest().getHeader(); - resourcePacksInfo.getResourcePackInfos().add(new ResourcePacksInfoPacket.Entry(header.getUuid().toString(), header.getVersionString(), resourcePack.getFile().length(), "", "", "", false)); + resourcePacksInfo.getResourcePackInfos().add(new ResourcePacksInfoPacket.Entry( + header.getUuid().toString(), header.getVersionString(), resourcePack.getFile().length(), + "", "", "", false, false)); } resourcePacksInfo.setForcedToAccept(GeyserConnector.getInstance().getConfig().isForceResourcePacks()); session.sendUpstreamPacket(resourcePacksInfo); From f08b40f79cc2e0da6fdb46aff3c4f9438ff70ce2 Mon Sep 17 00:00:00 2001 From: DoctorMacc Date: Wed, 9 Dec 2020 11:16:11 -0500 Subject: [PATCH 3/4] Actually update to Protocol 2.6.1-SNAPSHOT --- connector/pom.xml | 16 +++++++++++++--- .../connector/network/session/GeyserSession.java | 7 +++++-- .../EnchantmentInventoryTranslator.java | 12 +++++------- .../inventory/PlayerInventoryTranslator.java | 10 ++++++---- .../inventory/updater/ChestInventoryUpdater.java | 11 +++++++---- .../updater/ContainerInventoryUpdater.java | 4 +++- .../inventory/updater/InventoryUpdater.java | 4 +++- .../network/translators/item/RecipeRegistry.java | 10 +++++----- .../java/JavaDeclareRecipesTranslator.java | 6 +++--- connector/src/main/resources/languages | 2 +- 10 files changed, 51 insertions(+), 31 deletions(-) diff --git a/connector/pom.xml b/connector/pom.xml index ba67b0f1e07..20b8b99d079 100644 --- a/connector/pom.xml +++ b/connector/pom.xml @@ -30,18 +30,28 @@ compile - - com.github.GeyserMC.Protocol + com.github.CloudburstMC.Protocol bedrock-v422 - 2149098 + 87d862d69d compile net.sf.trove4j trove + + + com.nukkitx.network + raknet + + + com.nukkitx.network + raknet + 1.6.20 + compile + com.nukkitx.fastutil fastutil-int-int-maps diff --git a/connector/src/main/java/org/geysermc/connector/network/session/GeyserSession.java b/connector/src/main/java/org/geysermc/connector/network/session/GeyserSession.java index fc73b62ae77..79e47b1a1a2 100644 --- a/connector/src/main/java/org/geysermc/connector/network/session/GeyserSession.java +++ b/connector/src/main/java/org/geysermc/connector/network/session/GeyserSession.java @@ -67,10 +67,9 @@ import org.geysermc.connector.command.CommandSender; import org.geysermc.connector.common.AuthType; import org.geysermc.connector.entity.Entity; -import org.geysermc.connector.entity.player.SkullPlayerEntity; import org.geysermc.connector.entity.player.SessionPlayerEntity; +import org.geysermc.connector.entity.player.SkullPlayerEntity; import org.geysermc.connector.inventory.PlayerInventory; -import org.geysermc.connector.network.translators.chat.MessageTranslator; import org.geysermc.connector.network.remote.RemoteServer; import org.geysermc.connector.network.session.auth.AuthData; import org.geysermc.connector.network.session.auth.BedrockClientData; @@ -78,6 +77,7 @@ import org.geysermc.connector.network.translators.BiomeTranslator; import org.geysermc.connector.network.translators.EntityIdentifierRegistry; import org.geysermc.connector.network.translators.PacketTranslatorRegistry; +import org.geysermc.connector.network.translators.chat.MessageTranslator; import org.geysermc.connector.network.translators.collision.CollisionManager; import org.geysermc.connector.network.translators.inventory.EnchantmentInventoryTranslator; import org.geysermc.connector.network.translators.item.ItemRegistry; @@ -354,6 +354,9 @@ public void connect(RemoteServer remoteServer) { startGame(); this.remoteServer = remoteServer; + // Set the hardcoded shield ID to the ID we just defined in StartGamePacket + upstream.getSession().getHardcodedBlockingId().set(ItemRegistry.SHIELD.getBedrockId()); + ChunkUtils.sendEmptyChunks(this, playerEntity.getPosition().toInt(), 0, false); BiomeDefinitionListPacket biomeDefinitionListPacket = new BiomeDefinitionListPacket(); diff --git a/connector/src/main/java/org/geysermc/connector/network/translators/inventory/EnchantmentInventoryTranslator.java b/connector/src/main/java/org/geysermc/connector/network/translators/inventory/EnchantmentInventoryTranslator.java index 20a47fd025e..690d65e0d9e 100644 --- a/connector/src/main/java/org/geysermc/connector/network/translators/inventory/EnchantmentInventoryTranslator.java +++ b/connector/src/main/java/org/geysermc/connector/network/translators/inventory/EnchantmentInventoryTranslator.java @@ -47,9 +47,7 @@ import org.geysermc.connector.utils.InventoryUtils; import org.geysermc.connector.utils.LocaleUtils; -import java.util.Arrays; -import java.util.Collections; -import java.util.List; +import java.util.*; /** * A temporary reconstruction of the enchantment table UI until our inventory rewrite is complete. @@ -100,11 +98,11 @@ public void translateActions(GeyserSession session, Inventory inventory, List items = new ArrayList<>(5); + items.add(ItemTranslator.translateToBedrock(session, inventory.getItem(0))); + items.add(ItemTranslator.translateToBedrock(session, inventory.getItem(1))); for (int i = 0; i < 3; i++) { - items[i + 2] = session.getEnchantmentSlotData()[i].getItem() != null ? session.getEnchantmentSlotData()[i].getItem() : createEnchantmentBook(); + items.add(session.getEnchantmentSlotData()[i].getItem() != null ? session.getEnchantmentSlotData()[i].getItem() : createEnchantmentBook()); } InventoryContentPacket contentPacket = new InventoryContentPacket(); diff --git a/connector/src/main/java/org/geysermc/connector/network/translators/inventory/PlayerInventoryTranslator.java b/connector/src/main/java/org/geysermc/connector/network/translators/inventory/PlayerInventoryTranslator.java index 7d7673c4ef2..f75b8cb654b 100644 --- a/connector/src/main/java/org/geysermc/connector/network/translators/inventory/PlayerInventoryTranslator.java +++ b/connector/src/main/java/org/geysermc/connector/network/translators/inventory/PlayerInventoryTranslator.java @@ -41,6 +41,8 @@ import org.geysermc.connector.utils.InventoryUtils; import org.geysermc.connector.utils.LanguageUtils; +import java.util.Arrays; +import java.util.Collections; import java.util.List; public class PlayerInventoryTranslator extends InventoryTranslator { @@ -65,7 +67,7 @@ public void updateInventory(GeyserSession session, Inventory inventory) { for (int i = 36; i < 45; i++) { contents[i - 36] = ItemTranslator.translateToBedrock(session, inventory.getItem(i)); } - inventoryContentPacket.setContents(contents); + inventoryContentPacket.setContents(Arrays.asList(contents)); session.sendUpstreamPacket(inventoryContentPacket); // Armor @@ -75,13 +77,13 @@ public void updateInventory(GeyserSession session, Inventory inventory) { for (int i = 5; i < 9; i++) { contents[i - 5] = ItemTranslator.translateToBedrock(session, inventory.getItem(i)); } - armorContentPacket.setContents(contents); + armorContentPacket.setContents(Arrays.asList(contents)); session.sendUpstreamPacket(armorContentPacket); // Offhand InventoryContentPacket offhandPacket = new InventoryContentPacket(); offhandPacket.setContainerId(ContainerId.OFFHAND); - offhandPacket.setContents(new ItemData[]{ItemTranslator.translateToBedrock(session, inventory.getItem(45))}); + offhandPacket.setContents(Collections.singletonList(ItemTranslator.translateToBedrock(session, inventory.getItem(45)))); session.sendUpstreamPacket(offhandPacket); } @@ -130,7 +132,7 @@ public void updateSlot(GeyserSession session, Inventory inventory, int slot) { } else if (slot == 45) { InventoryContentPacket offhandPacket = new InventoryContentPacket(); offhandPacket.setContainerId(ContainerId.OFFHAND); - offhandPacket.setContents(new ItemData[]{ItemTranslator.translateToBedrock(session, inventory.getItem(slot))}); + offhandPacket.setContents(Collections.singletonList(ItemTranslator.translateToBedrock(session, inventory.getItem(slot)))); session.sendUpstreamPacket(offhandPacket); } } diff --git a/connector/src/main/java/org/geysermc/connector/network/translators/inventory/updater/ChestInventoryUpdater.java b/connector/src/main/java/org/geysermc/connector/network/translators/inventory/updater/ChestInventoryUpdater.java index e45945bc3ec..ec2d6287cf2 100644 --- a/connector/src/main/java/org/geysermc/connector/network/translators/inventory/updater/ChestInventoryUpdater.java +++ b/connector/src/main/java/org/geysermc/connector/network/translators/inventory/updater/ChestInventoryUpdater.java @@ -36,6 +36,9 @@ import org.geysermc.connector.utils.InventoryUtils; import org.geysermc.connector.utils.LanguageUtils; +import java.util.ArrayList; +import java.util.List; + @AllArgsConstructor public class ChestInventoryUpdater extends InventoryUpdater { private static final ItemData UNUSUABLE_SPACE_BLOCK = InventoryUtils.createUnusableSpaceBlock(LanguageUtils.getLocaleStringLog("geyser.inventory.unusable_item.slot")); @@ -46,12 +49,12 @@ public class ChestInventoryUpdater extends InventoryUpdater { public void updateInventory(InventoryTranslator translator, GeyserSession session, Inventory inventory) { super.updateInventory(translator, session, inventory); - ItemData[] bedrockItems = new ItemData[paddedSize]; - for (int i = 0; i < bedrockItems.length; i++) { + List bedrockItems = new ArrayList<>(paddedSize); + for (int i = 0; i < paddedSize; i++) { if (i < translator.size) { - bedrockItems[i] = ItemTranslator.translateToBedrock(session, inventory.getItem(i)); + bedrockItems.add(ItemTranslator.translateToBedrock(session, inventory.getItem(i))); } else { - bedrockItems[i] = UNUSUABLE_SPACE_BLOCK; + bedrockItems.add(UNUSUABLE_SPACE_BLOCK); } } diff --git a/connector/src/main/java/org/geysermc/connector/network/translators/inventory/updater/ContainerInventoryUpdater.java b/connector/src/main/java/org/geysermc/connector/network/translators/inventory/updater/ContainerInventoryUpdater.java index 51f33ac43c5..8d58c67f759 100644 --- a/connector/src/main/java/org/geysermc/connector/network/translators/inventory/updater/ContainerInventoryUpdater.java +++ b/connector/src/main/java/org/geysermc/connector/network/translators/inventory/updater/ContainerInventoryUpdater.java @@ -33,6 +33,8 @@ import org.geysermc.connector.network.translators.inventory.InventoryTranslator; import org.geysermc.connector.network.translators.item.ItemTranslator; +import java.util.Arrays; + public class ContainerInventoryUpdater extends InventoryUpdater { @Override public void updateInventory(InventoryTranslator translator, GeyserSession session, Inventory inventory) { @@ -45,7 +47,7 @@ public void updateInventory(InventoryTranslator translator, GeyserSession sessio InventoryContentPacket contentPacket = new InventoryContentPacket(); contentPacket.setContainerId(inventory.getId()); - contentPacket.setContents(bedrockItems); + contentPacket.setContents(Arrays.asList(bedrockItems)); session.sendUpstreamPacket(contentPacket); } diff --git a/connector/src/main/java/org/geysermc/connector/network/translators/inventory/updater/InventoryUpdater.java b/connector/src/main/java/org/geysermc/connector/network/translators/inventory/updater/InventoryUpdater.java index 57601a9e0de..d7ccf0e997c 100644 --- a/connector/src/main/java/org/geysermc/connector/network/translators/inventory/updater/InventoryUpdater.java +++ b/connector/src/main/java/org/geysermc/connector/network/translators/inventory/updater/InventoryUpdater.java @@ -34,6 +34,8 @@ import org.geysermc.connector.network.translators.inventory.InventoryTranslator; import org.geysermc.connector.network.translators.item.ItemTranslator; +import java.util.Arrays; + public abstract class InventoryUpdater { public void updateInventory(InventoryTranslator translator, GeyserSession session, Inventory inventory) { ItemData[] bedrockItems = new ItemData[36]; @@ -43,7 +45,7 @@ public void updateInventory(InventoryTranslator translator, GeyserSession sessio } InventoryContentPacket contentPacket = new InventoryContentPacket(); contentPacket.setContainerId(ContainerId.INVENTORY); - contentPacket.setContents(bedrockItems); + contentPacket.setContents(Arrays.asList(bedrockItems)); session.sendUpstreamPacket(contentPacket); } diff --git a/connector/src/main/java/org/geysermc/connector/network/translators/item/RecipeRegistry.java b/connector/src/main/java/org/geysermc/connector/network/translators/item/RecipeRegistry.java index bcdf7fe2bf2..244a01c50ff 100644 --- a/connector/src/main/java/org/geysermc/connector/network/translators/item/RecipeRegistry.java +++ b/connector/src/main/java/org/geysermc/connector/network/translators/item/RecipeRegistry.java @@ -164,19 +164,19 @@ private static CraftingData getCraftingDataFromJsonNode(JsonNode node) { letterToRecipe.put(entry.getKey(), ItemRegistry.getBedrockItemFromJson(entry.getValue())); } - ItemData[] inputs = new ItemData[shape.size() * shape.get(0).length()]; + List inputs = new ArrayList<>(shape.size() * shape.get(0).length()); int i = 0; // Create a linear array of items from the "cube" of the shape for (int j = 0; i < shape.size() * shape.get(0).length(); j++) { for (char c : shape.get(j).toCharArray()) { ItemData data = letterToRecipe.getOrDefault(String.valueOf(c), ItemData.AIR); - inputs[i] = data; + inputs.add(data); i++; } } return CraftingData.fromShaped(uuid.toString(), shape.get(0).length(), shape.size(), - inputs, new ItemData[]{output}, uuid, "crafting_table", 0, LAST_RECIPE_NET_ID++); + inputs, Collections.singletonList(output), uuid, "crafting_table", 0, LAST_RECIPE_NET_ID++); } List inputs = new ObjectArrayList<>(); for (JsonNode entry : node.get("input")) { @@ -185,10 +185,10 @@ private static CraftingData getCraftingDataFromJsonNode(JsonNode node) { if (node.get("type").asInt() == 5) { // Shulker box return CraftingData.fromShulkerBox(uuid.toString(), - inputs.toArray(new ItemData[0]), new ItemData[]{output}, uuid, "crafting_table", 0, LAST_RECIPE_NET_ID++); + inputs, Collections.singletonList(output), uuid, "crafting_table", 0, LAST_RECIPE_NET_ID++); } return CraftingData.fromShapeless(uuid.toString(), - inputs.toArray(new ItemData[0]), new ItemData[]{output}, uuid, "crafting_table", 0, LAST_RECIPE_NET_ID++); + inputs, Collections.singletonList(output), uuid, "crafting_table", 0, LAST_RECIPE_NET_ID++); } public static void init() { diff --git a/connector/src/main/java/org/geysermc/connector/network/translators/java/JavaDeclareRecipesTranslator.java b/connector/src/main/java/org/geysermc/connector/network/translators/java/JavaDeclareRecipesTranslator.java index b233ba59ce9..187279ecfef 100644 --- a/connector/src/main/java/org/geysermc/connector/network/translators/java/JavaDeclareRecipesTranslator.java +++ b/connector/src/main/java/org/geysermc/connector/network/translators/java/JavaDeclareRecipesTranslator.java @@ -65,7 +65,7 @@ public void translate(ServerDeclareRecipesPacket packet, GeyserSession session) for (ItemData[] inputs : inputCombinations) { UUID uuid = UUID.randomUUID(); craftingDataPacket.getCraftingData().add(CraftingData.fromShapeless(uuid.toString(), - inputs, new ItemData[]{output}, uuid, "crafting_table", 0, networkId++)); + Arrays.asList(inputs), Collections.singletonList(output), uuid, "crafting_table", 0, networkId++)); } break; } @@ -77,8 +77,8 @@ public void translate(ServerDeclareRecipesPacket packet, GeyserSession session) for (ItemData[] inputs : inputCombinations) { UUID uuid = UUID.randomUUID(); craftingDataPacket.getCraftingData().add(CraftingData.fromShaped(uuid.toString(), - shapedRecipeData.getWidth(), shapedRecipeData.getHeight(), inputs, - new ItemData[]{output}, uuid, "crafting_table", 0, networkId++)); + shapedRecipeData.getWidth(), shapedRecipeData.getHeight(), Arrays.asList(inputs), + Collections.singletonList(output), uuid, "crafting_table", 0, networkId++)); } break; } diff --git a/connector/src/main/resources/languages b/connector/src/main/resources/languages index 1e2815bdd9c..b7ef31bd9c4 160000 --- a/connector/src/main/resources/languages +++ b/connector/src/main/resources/languages @@ -1 +1 @@ -Subproject commit 1e2815bdd9c78fa6865656db0d8b580b20aa87f1 +Subproject commit b7ef31bd9c45aa3a0735883764c231f30cb55bfa From ac9d876491b6edca8dc2bb08b10bcfbde4d03225 Mon Sep 17 00:00:00 2001 From: DoctorMacc Date: Wed, 9 Dec 2020 11:22:24 -0500 Subject: [PATCH 4/4] Keep languages commit the same --- connector/src/main/resources/languages | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/connector/src/main/resources/languages b/connector/src/main/resources/languages index b7ef31bd9c4..1e2815bdd9c 160000 --- a/connector/src/main/resources/languages +++ b/connector/src/main/resources/languages @@ -1 +1 @@ -Subproject commit b7ef31bd9c45aa3a0735883764c231f30cb55bfa +Subproject commit 1e2815bdd9c78fa6865656db0d8b580b20aa87f1