From 6e12d17cd419e1c1c63a3546edc8b9400b386108 Mon Sep 17 00:00:00 2001 From: Sculas Date: Wed, 20 Mar 2024 18:14:31 +0100 Subject: [PATCH] fix: fix 1.20.4 getting stuck on loading terrain --- .../loohp/limbo/network/ClientConnection.java | 59 +++---------------- .../packets/PacketPlayOutGameEvent.java | 55 +++++++++++++++++ src/main/resources/mapping.json | 3 +- 3 files changed, 64 insertions(+), 53 deletions(-) create mode 100644 src/main/java/com/loohp/limbo/network/protocol/packets/PacketPlayOutGameEvent.java diff --git a/src/main/java/com/loohp/limbo/network/ClientConnection.java b/src/main/java/com/loohp/limbo/network/ClientConnection.java index 0a93dd3..62c89e9 100644 --- a/src/main/java/com/loohp/limbo/network/ClientConnection.java +++ b/src/main/java/com/loohp/limbo/network/ClientConnection.java @@ -41,61 +41,13 @@ import com.loohp.limbo.inventory.AnvilInventory; import com.loohp.limbo.inventory.Inventory; import com.loohp.limbo.inventory.ItemStack; import com.loohp.limbo.location.Location; -import com.loohp.limbo.network.protocol.packets.ClientboundFinishConfigurationPacket; -import com.loohp.limbo.network.protocol.packets.ClientboundRegistryDataPacket; -import com.loohp.limbo.network.protocol.packets.Packet; -import com.loohp.limbo.network.protocol.packets.PacketHandshakingIn; -import com.loohp.limbo.network.protocol.packets.PacketIn; -import com.loohp.limbo.network.protocol.packets.PacketLoginInLoginStart; -import com.loohp.limbo.network.protocol.packets.PacketLoginInPluginMessaging; -import com.loohp.limbo.network.protocol.packets.PacketLoginOutDisconnect; -import com.loohp.limbo.network.protocol.packets.PacketLoginOutLoginSuccess; -import com.loohp.limbo.network.protocol.packets.PacketLoginOutPluginMessaging; -import com.loohp.limbo.network.protocol.packets.PacketOut; -import com.loohp.limbo.network.protocol.packets.PacketPlayInBlockDig; -import com.loohp.limbo.network.protocol.packets.PacketPlayInBlockPlace; -import com.loohp.limbo.network.protocol.packets.PacketPlayInChat; -import com.loohp.limbo.network.protocol.packets.PacketPlayInCloseWindow; -import com.loohp.limbo.network.protocol.packets.PacketPlayInHeldItemChange; -import com.loohp.limbo.network.protocol.packets.PacketPlayInItemName; -import com.loohp.limbo.network.protocol.packets.PacketPlayInKeepAlive; -import com.loohp.limbo.network.protocol.packets.PacketPlayInPickItem; -import com.loohp.limbo.network.protocol.packets.PacketPlayInPluginMessaging; -import com.loohp.limbo.network.protocol.packets.PacketPlayInPosition; -import com.loohp.limbo.network.protocol.packets.PacketPlayInPositionAndLook; -import com.loohp.limbo.network.protocol.packets.ServerboundResourcePackPacket; +import com.loohp.limbo.network.protocol.packets.*; import com.loohp.limbo.network.protocol.packets.ServerboundResourcePackPacket.Action; -import com.loohp.limbo.network.protocol.packets.PacketPlayInRotation; -import com.loohp.limbo.network.protocol.packets.PacketPlayInSetCreativeSlot; -import com.loohp.limbo.network.protocol.packets.PacketPlayInTabComplete; -import com.loohp.limbo.network.protocol.packets.PacketPlayInUseItem; -import com.loohp.limbo.network.protocol.packets.PacketPlayInWindowClick; -import com.loohp.limbo.network.protocol.packets.PacketPlayOutDeclareCommands; -import com.loohp.limbo.network.protocol.packets.PacketPlayOutDisconnect; -import com.loohp.limbo.network.protocol.packets.PacketPlayOutEntityMetadata; -import com.loohp.limbo.network.protocol.packets.PacketPlayOutGameState; -import com.loohp.limbo.network.protocol.packets.PacketPlayOutHeldItemChange; -import com.loohp.limbo.network.protocol.packets.PacketPlayOutKeepAlive; -import com.loohp.limbo.network.protocol.packets.PacketPlayOutLogin; -import com.loohp.limbo.network.protocol.packets.PacketPlayOutPlayerAbilities; import com.loohp.limbo.network.protocol.packets.PacketPlayOutPlayerAbilities.PlayerAbilityFlags; -import com.loohp.limbo.network.protocol.packets.PacketPlayOutPlayerInfo; import com.loohp.limbo.network.protocol.packets.PacketPlayOutPlayerInfo.PlayerInfoAction; import com.loohp.limbo.network.protocol.packets.PacketPlayOutPlayerInfo.PlayerInfoData; import com.loohp.limbo.network.protocol.packets.PacketPlayOutPlayerInfo.PlayerInfoData.PlayerInfoDataAddPlayer.PlayerSkinProperty; -import com.loohp.limbo.network.protocol.packets.PacketPlayOutPluginMessaging; -import com.loohp.limbo.network.protocol.packets.PacketPlayOutPositionAndLook; -import com.loohp.limbo.network.protocol.packets.PacketPlayOutSpawnPosition; -import com.loohp.limbo.network.protocol.packets.PacketPlayOutTabComplete; import com.loohp.limbo.network.protocol.packets.PacketPlayOutTabComplete.TabCompleteMatches; -import com.loohp.limbo.network.protocol.packets.PacketPlayOutUpdateViewPosition; -import com.loohp.limbo.network.protocol.packets.PacketStatusInPing; -import com.loohp.limbo.network.protocol.packets.PacketStatusInRequest; -import com.loohp.limbo.network.protocol.packets.PacketStatusOutPong; -import com.loohp.limbo.network.protocol.packets.PacketStatusOutResponse; -import com.loohp.limbo.network.protocol.packets.ServerboundChatCommandPacket; -import com.loohp.limbo.network.protocol.packets.ServerboundFinishConfigurationPacket; -import com.loohp.limbo.network.protocol.packets.ServerboundLoginAcknowledgedPacket; import com.loohp.limbo.player.Player; import com.loohp.limbo.player.PlayerInteractManager; import com.loohp.limbo.player.PlayerInventory; @@ -613,8 +565,6 @@ public class ClientConnection extends Thread { String str = (properties.isLogPlayerIPAddresses() ? inetAddress.getHostName() : "") + ":" + clientSocket.getPort() + "|" + player.getName() + "(" + player.getUniqueId() + ")"; Limbo.getInstance().getConsole().sendMessage("[/" + str + "] <-> Player had connected to the Limbo server!"); - player.playerInteractManager.update(); - PacketPlayOutDeclareCommands declare = DeclareCommands.getDeclareCommandsPacket(player); if (declare != null) { sendPacket(declare); @@ -653,8 +603,13 @@ public class ClientConnection extends Thread { // PLAYER LIST HEADER AND FOOTER CODE CONRIBUTED BY GAMERDUCK123 player.sendPlayerListHeaderAndFooter(properties.getTabHeader(), properties.getTabFooter()); - + + // Start waiting for level chunks + PacketPlayOutGameEvent gameEvent = new PacketPlayOutGameEvent((byte) 13, 0); + sendPacket(gameEvent); + ready = true; + player.playerInteractManager.update(); keepAliveTask = new TimerTask() { @Override diff --git a/src/main/java/com/loohp/limbo/network/protocol/packets/PacketPlayOutGameEvent.java b/src/main/java/com/loohp/limbo/network/protocol/packets/PacketPlayOutGameEvent.java new file mode 100644 index 0000000..8eb5f7b --- /dev/null +++ b/src/main/java/com/loohp/limbo/network/protocol/packets/PacketPlayOutGameEvent.java @@ -0,0 +1,55 @@ +/* + * This file is part of Limbo. + * + * Copyright (C) 2022. LoohpJames + * Copyright (C) 2022. Contributors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.loohp.limbo.network.protocol.packets; + +import java.io.ByteArrayOutputStream; +import java.io.DataOutputStream; +import java.io.IOException; + +public class PacketPlayOutGameEvent extends PacketOut { + + private byte event; + private float value; + + public PacketPlayOutGameEvent(byte event, float value) { + this.event = event; + this.value = value; + } + + public int getEvent() { + return event; + } + + public float getValue() { + return value; + } + + public byte[] serializePacket() throws IOException { + ByteArrayOutputStream buffer = new ByteArrayOutputStream(); + + DataOutputStream output = new DataOutputStream(buffer); + output.writeByte(Packet.getPlayOut().get(getClass())); + output.writeByte(Byte.toUnsignedInt(event)); + output.writeFloat(value); + + return buffer.toByteArray(); + } + +} diff --git a/src/main/resources/mapping.json b/src/main/resources/mapping.json index 365880c..a9c649a 100644 --- a/src/main/resources/mapping.json +++ b/src/main/resources/mapping.json @@ -43,6 +43,7 @@ "PacketPlayOutLogin": "0x29", "PacketPlayOutPositionAndLook": "0x3E", "PacketPlayOutSpawnPosition": "0x54", + "PacketPlayOutGameEvent": "0x20", "ClientboundSystemChatPacket": "0x69", "PacketPlayOutPlayerAbilities": "0x36", "ClientboundLevelChunkWithLightPacket": "0x25", @@ -86,4 +87,4 @@ "PacketStatusOutResponse": "0x00", "PacketStatusOutPong": "0x01" } -} \ No newline at end of file +}