diff --git a/connector/pom.xml b/connector/pom.xml index 3bd75fa2..328b209b 100644 --- a/connector/pom.xml +++ b/connector/pom.xml @@ -32,15 +32,26 @@ com.nukkitx.protocol bedrock-v422 - 2.6.0-SNAPSHOT + 2.6.1-SNAPSHOT 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/BedrockProtocol.java b/connector/src/main/java/org/geysermc/connector/network/BedrockProtocol.java index d0cc0f42..91c23799 100644 --- a/connector/src/main/java/org/geysermc/connector/network/BedrockProtocol.java +++ b/connector/src/main/java/org/geysermc/connector/network/BedrockProtocol.java @@ -48,9 +48,8 @@ public class BedrockProtocol { static { SUPPORTED_BEDROCK_CODECS.add(Bedrock_v419.V419_CODEC.toBuilder() - .minecraftVersion("1.16.100/1.16.101") // We change this as 1.16.100.60 (beta) crashes with Geyser - .build() - ); + .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); } 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 18a7f3d5..23df3f16 100644 --- a/connector/src/main/java/org/geysermc/connector/network/UpstreamPacketHandler.java +++ b/connector/src/main/java/org/geysermc/connector/network/UpstreamPacketHandler.java @@ -84,7 +84,7 @@ public class UpstreamPacketHandler extends LoggingPacketHandler { ResourcePackManifest.Header header = resourcePack.getManifest().getHeader(); resourcePacksInfo.getResourcePackInfos().add(new ResourcePacksInfoPacket.Entry( header.getUuid().toString(), header.getVersionString(), resourcePack.getFile().length(), - "", "", "", false, false)); + "", "", "", false, false)); } resourcePacksInfo.setForcedToAccept(GeyserConnector.getInstance().getConfig().isForceResourcePacks()); session.sendUpstreamPacket(resourcePacksInfo); 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 4a640489..1125be84 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 @@ -69,11 +69,10 @@ import org.geysermc.connector.GeyserConnector; 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.Inventory; 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; @@ -81,6 +80,7 @@ import org.geysermc.connector.network.session.cache.*; 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.item.ItemRegistry; import org.geysermc.connector.skin.SkinManager; @@ -369,6 +369,9 @@ public class GeyserSession implements CommandSender { 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/PlayerInventoryTranslator.java b/connector/src/main/java/org/geysermc/connector/network/translators/inventory/PlayerInventoryTranslator.java index 48315fc1..5ace8fde 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 @@ -38,6 +38,8 @@ import org.geysermc.connector.network.translators.item.ItemTranslator; 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 { @@ -62,7 +64,7 @@ public class PlayerInventoryTranslator extends InventoryTranslator { for (int i = 36; i < 45; i++) { contents[i - 36] = inventory.getItem(i).getItemData(session); } - inventoryContentPacket.setContents(contents); + inventoryContentPacket.setContents(Arrays.asList(contents)); session.sendUpstreamPacket(inventoryContentPacket); // Armor @@ -72,13 +74,13 @@ public class PlayerInventoryTranslator extends InventoryTranslator { for (int i = 5; i < 9; i++) { contents[i - 5] = inventory.getItem(i).getItemData(session); } - armorContentPacket.setContents(contents); + armorContentPacket.setContents(Arrays.asList(contents)); session.sendUpstreamPacket(armorContentPacket); // Offhand InventoryContentPacket offhandPacket = new InventoryContentPacket(); offhandPacket.setContainerId(ContainerId.OFFHAND); - offhandPacket.setContents(new ItemData[]{inventory.getItem(45).getItemData(session)}); + offhandPacket.setContents(Collections.singletonList(inventory.getItem(45).getItemData(session))); session.sendUpstreamPacket(offhandPacket); } @@ -127,7 +129,7 @@ public class PlayerInventoryTranslator extends InventoryTranslator { } else if (slot == 45) { InventoryContentPacket offhandPacket = new InventoryContentPacket(); offhandPacket.setContainerId(ContainerId.OFFHAND); - offhandPacket.setContents(new ItemData[]{inventory.getItem(slot).getItemData(session)}); + offhandPacket.setContents(Collections.singletonList(inventory.getItem(slot).getItemData(session))); 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 58e6178b..49a1a036 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 @@ -32,10 +32,12 @@ import lombok.AllArgsConstructor; import org.geysermc.connector.inventory.Inventory; import org.geysermc.connector.network.session.GeyserSession; import org.geysermc.connector.network.translators.inventory.InventoryTranslator; -import org.geysermc.connector.network.translators.item.ItemTranslator; 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 +48,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] = inventory.getItem(i).getItemData(session); + bedrockItems.add(inventory.getItem(i).getItemData(session)); } 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 1abc65b5..399e1ebd 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.session.GeyserSession; 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 class ContainerInventoryUpdater extends InventoryUpdater { 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 655868c9..e7d14f13 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.session.GeyserSession; 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 abstract class InventoryUpdater { } 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 f87450f9..405203ec 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 @@ -166,19 +166,19 @@ public class RecipeRegistry { 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")) { @@ -187,10 +187,10 @@ public class RecipeRegistry { 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 7442f388..824b5acd 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 @@ -68,7 +68,7 @@ public class JavaDeclareRecipesTranslator extends PacketTranslator