From 465af0e0518a0c29d22bdddd52388c3557cb9dbb Mon Sep 17 00:00:00 2001 From: mworzala Date: Sat, 30 Sep 2023 13:17:44 -0400 Subject: [PATCH] stable configuration state join --- .../net/minestom/server/MinecraftServer.java | 6 +- .../minestom/server/ServerProcessImpl.java | 6 +- .../net/minestom/server/entity/Player.java | 15 +- .../server/entity/fakeplayer/FakePlayer.java | 2 +- .../fakeplayer/FakePlayerController.java | 4 +- .../player/PlayerPluginMessageEvent.java | 3 +- .../event/player/UpdateTagListEvent.java | 2 +- .../minestom/server/instance/AnvilLoader.java | 1 - .../server/instance/LightingChunk.java | 3 +- ...sListener.java => PlayStatusListener.java} | 2 +- .../server/listener/WindowListener.java | 4 +- .../{ => common}/KeepAliveListener.java | 4 +- .../{ => common}/PluginMessageListener.java | 4 +- .../{ => common}/ResourcePackListener.java | 4 +- .../{ => common}/SettingsListener.java | 4 +- .../manager/PacketListenerManager.java | 181 +++++++++----- ...r.java => PacketPlayListenerConsumer.java} | 4 +- .../PacketPrePlayListenerConsumer.java | 16 ++ .../preplay/ConfigurationListener.java | 13 + .../preplay/HandshakeListener.java} | 57 +---- .../listener/preplay/LoginListener.java | 225 ++++++++++++++++++ .../listener/preplay/StatusListener.java | 43 ++++ .../server/network/ConnectionManager.java | 52 +++- .../server/network/ConnectionState.java | 2 +- .../server/network/PacketProcessor.java | 53 +++-- .../packet/client/ClientPacketsHandler.java | 157 +++++++----- .../packet/client/ClientPreplayPacket.java | 18 -- .../ClientKeepAlivePacket.java | 2 +- .../ClientPluginMessagePacket.java | 2 +- .../{play => common}/ClientPongPacket.java | 2 +- .../ClientResourcePackStatusPacket.java | 2 +- .../ClientSettingsPacket.java | 2 +- .../ClientFinishConfigurationPacket.java | 17 ++ .../handshake/ClientHandshakePacket.java | 41 ++++ .../login/ClientEncryptionResponsePacket.java | 21 ++ .../login/ClientLoginAcknowledgedPacket.java | 17 ++ .../ClientLoginPluginResponsePacket.java | 22 ++ .../client/login/ClientLoginStartPacket.java | 27 +++ .../login/EncryptionResponsePacket.java | 127 ---------- .../login/LoginPluginResponsePacket.java | 82 ------- .../packet/client/login/LoginStartPacket.java | 82 ------- .../status/LegacyServerListPingPacket.java | 10 +- .../packet/client/status/PingPacket.java | 29 +-- .../client/status/StatusRequestPacket.java | 17 +- .../network/packet/server/CachedPacket.java | 13 +- .../network/packet/server/SendablePacket.java | 5 +- .../network/packet/server/ServerPacket.java | 5 +- .../packet/server/ServerPacketIdentifier.java | 15 +- .../{play => common}/DisconnectPacket.java | 7 +- .../{play => common}/KeepAlivePacket.java | 7 +- .../server/{play => common}/PingPacket.java | 7 +- .../{play => common}/PluginMessagePacket.java | 7 +- .../ResourcePackSendPacket.java | 7 +- .../server/{play => common}/TagsPacket.java | 7 +- .../FinishConfigurationPacket.java | 22 ++ .../server/login/EncryptionRequestPacket.java | 3 +- .../server/login/LoginDisconnectPacket.java | 3 +- .../login/LoginPluginRequestPacket.java | 3 +- .../server/login/LoginSuccessPacket.java | 3 +- .../server/login/SetCompressionPacket.java | 3 +- .../play/AcknowledgeBlockChangePacket.java | 3 +- .../packet/server/play/ActionBarPacket.java | 3 +- .../server/play/AdvancementsPacket.java | 3 +- .../server/play/AttachEntityPacket.java | 3 +- .../packet/server/play/BlockActionPacket.java | 3 +- .../play/BlockBreakAnimationPacket.java | 3 +- .../packet/server/play/BlockChangePacket.java | 3 +- .../server/play/BlockEntityDataPacket.java | 3 +- .../packet/server/play/BossBarPacket.java | 3 +- .../packet/server/play/CameraPacket.java | 3 +- .../server/play/ChangeGameStatePacket.java | 3 +- .../packet/server/play/ChunkDataPacket.java | 3 +- .../packet/server/play/ClearTitlesPacket.java | 3 +- .../packet/server/play/CloseWindowPacket.java | 3 +- .../packet/server/play/CollectItemPacket.java | 3 +- .../server/play/CraftRecipeResponse.java | 3 +- .../play/CustomChatCompletionPacket.java | 3 +- .../packet/server/play/DamageEventPacket.java | 3 +- .../server/play/DeathCombatEventPacket.java | 3 +- .../server/play/DeclareCommandsPacket.java | 3 +- .../server/play/DeclareRecipesPacket.java | 3 +- .../packet/server/play/DeleteChatPacket.java | 3 +- .../server/play/DestroyEntitiesPacket.java | 3 +- .../server/play/DisplayScoreboardPacket.java | 3 +- .../packet/server/play/EffectPacket.java | 3 +- .../server/play/EndCombatEventPacket.java | 3 +- .../server/play/EnterCombatEventPacket.java | 3 +- .../server/play/EntityAnimationPacket.java | 3 +- .../server/play/EntityEffectPacket.java | 3 +- .../server/play/EntityEquipmentPacket.java | 3 +- .../server/play/EntityHeadLookPacket.java | 3 +- .../server/play/EntityMetaDataPacket.java | 3 +- .../play/EntityPositionAndRotationPacket.java | 3 +- .../server/play/EntityPositionPacket.java | 3 +- .../server/play/EntityPropertiesPacket.java | 3 +- .../server/play/EntityRotationPacket.java | 3 +- .../server/play/EntitySoundEffectPacket.java | 3 +- .../server/play/EntityStatusPacket.java | 3 +- .../server/play/EntityTeleportPacket.java | 3 +- .../server/play/EntityVelocityPacket.java | 3 +- .../packet/server/play/ExplosionPacket.java | 3 +- .../packet/server/play/FacePlayerPacket.java | 3 +- .../server/play/HeldItemChangePacket.java | 3 +- .../server/play/HitAnimationPacket.java | 3 +- .../play/InitializeWorldBorderPacket.java | 3 +- .../packet/server/play/JoinGamePacket.java | 3 +- .../packet/server/play/MapDataPacket.java | 3 +- .../server/play/MultiBlockChangePacket.java | 3 +- .../server/play/NbtQueryResponsePacket.java | 3 +- .../packet/server/play/OpenBookPacket.java | 3 +- .../server/play/OpenHorseWindowPacket.java | 3 +- .../server/play/OpenSignEditorPacket.java | 3 +- .../packet/server/play/OpenWindowPacket.java | 3 +- .../packet/server/play/ParticlePacket.java | 3 +- .../server/play/PlayerAbilitiesPacket.java | 3 +- .../server/play/PlayerChatMessagePacket.java | 3 +- .../server/play/PlayerInfoRemovePacket.java | 3 +- .../server/play/PlayerInfoUpdatePacket.java | 3 +- .../play/PlayerListHeaderAndFooterPacket.java | 3 +- .../play/PlayerPositionAndLookPacket.java | 3 +- .../server/play/RemoveEntityEffectPacket.java | 3 +- .../packet/server/play/RespawnPacket.java | 3 +- .../play/ScoreboardObjectivePacket.java | 3 +- .../play/SelectAdvancementTabPacket.java | 3 +- .../packet/server/play/ServerDataPacket.java | 3 +- .../server/play/ServerDifficultyPacket.java | 3 +- .../packet/server/play/SetCooldownPacket.java | 3 +- .../server/play/SetExperiencePacket.java | 3 +- .../server/play/SetPassengersPacket.java | 3 +- .../packet/server/play/SetSlotPacket.java | 3 +- .../server/play/SetTitleSubTitlePacket.java | 3 +- .../server/play/SetTitleTextPacket.java | 3 +- .../server/play/SetTitleTimePacket.java | 3 +- .../packet/server/play/SoundEffectPacket.java | 3 +- .../packet/server/play/SpawnEntityPacket.java | 3 +- .../server/play/SpawnExperienceOrbPacket.java | 3 +- .../packet/server/play/SpawnPlayerPacket.java | 3 +- .../server/play/SpawnPositionPacket.java | 3 +- .../packet/server/play/StatisticsPacket.java | 3 +- .../packet/server/play/StopSoundPacket.java | 3 +- .../packet/server/play/SystemChatPacket.java | 3 +- .../packet/server/play/TabCompletePacket.java | 3 +- .../packet/server/play/TeamsPacket.java | 3 +- .../packet/server/play/TimeUpdatePacket.java | 3 +- .../packet/server/play/TradeListPacket.java | 3 +- .../packet/server/play/UnloadChunkPacket.java | 3 +- .../server/play/UnlockRecipesPacket.java | 3 +- .../server/play/UpdateHealthPacket.java | 3 +- .../packet/server/play/UpdateLightPacket.java | 3 +- .../packet/server/play/UpdateScorePacket.java | 3 +- .../play/UpdateSimulationDistancePacket.java | 3 +- .../server/play/UpdateViewDistancePacket.java | 3 +- .../server/play/UpdateViewPositionPacket.java | 3 +- .../packet/server/play/VehicleMovePacket.java | 3 +- .../packet/server/play/WindowItemsPacket.java | 3 +- .../server/play/WindowPropertyPacket.java | 3 +- .../server/play/WorldBorderCenterPacket.java | 3 +- .../play/WorldBorderLerpSizePacket.java | 3 +- .../server/play/WorldBorderSizePacket.java | 3 +- .../play/WorldBorderWarningDelayPacket.java | 3 +- .../play/WorldBorderWarningReachPacket.java | 3 +- .../packet/server/status/PongPacket.java | 3 +- .../{handshake => status}/ResponsePacket.java | 5 +- .../network/player/FakePlayerConnection.java | 2 +- .../network/player/PlayerConnection.java | 2 +- .../player/PlayerSocketConnection.java | 16 +- .../minestom/server/utils/PacketUtils.java | 20 +- .../entity/player/PlayerIntegrationTest.java | 3 +- .../server/network/PacketWriteReadTest.java | 14 +- .../server/network/SocketReadTest.java | 2 +- .../server/network/SocketWriteTest.java | 4 +- .../network/socket/ServerAddressTest.java | 9 +- .../minestom/testing/TestConnectionImpl.java | 4 +- 173 files changed, 1131 insertions(+), 760 deletions(-) rename src/main/java/net/minestom/server/listener/{StatusListener.java => PlayStatusListener.java} (97%) rename src/main/java/net/minestom/server/listener/{ => common}/KeepAliveListener.java (85%) rename src/main/java/net/minestom/server/listener/{ => common}/PluginMessageListener.java (78%) rename src/main/java/net/minestom/server/listener/{ => common}/ResourcePackListener.java (74%) rename src/main/java/net/minestom/server/listener/{ => common}/SettingsListener.java (85%) rename src/main/java/net/minestom/server/listener/manager/{PacketListenerConsumer.java => PacketPlayListenerConsumer.java} (69%) create mode 100644 src/main/java/net/minestom/server/listener/manager/PacketPrePlayListenerConsumer.java create mode 100644 src/main/java/net/minestom/server/listener/preplay/ConfigurationListener.java rename src/main/java/net/minestom/server/{network/packet/client/handshake/HandshakePacket.java => listener/preplay/HandshakeListener.java} (72%) create mode 100644 src/main/java/net/minestom/server/listener/preplay/LoginListener.java create mode 100644 src/main/java/net/minestom/server/listener/preplay/StatusListener.java delete mode 100644 src/main/java/net/minestom/server/network/packet/client/ClientPreplayPacket.java rename src/main/java/net/minestom/server/network/packet/client/{play => common}/ClientKeepAlivePacket.java (89%) rename src/main/java/net/minestom/server/network/packet/client/{play => common}/ClientPluginMessagePacket.java (93%) rename src/main/java/net/minestom/server/network/packet/client/{play => common}/ClientPongPacket.java (89%) rename src/main/java/net/minestom/server/network/packet/client/{play => common}/ClientResourcePackStatusPacket.java (91%) rename src/main/java/net/minestom/server/network/packet/client/{play => common}/ClientSettingsPacket.java (96%) create mode 100644 src/main/java/net/minestom/server/network/packet/client/configuration/ClientFinishConfigurationPacket.java create mode 100644 src/main/java/net/minestom/server/network/packet/client/handshake/ClientHandshakePacket.java create mode 100644 src/main/java/net/minestom/server/network/packet/client/login/ClientEncryptionResponsePacket.java create mode 100644 src/main/java/net/minestom/server/network/packet/client/login/ClientLoginAcknowledgedPacket.java create mode 100644 src/main/java/net/minestom/server/network/packet/client/login/ClientLoginPluginResponsePacket.java create mode 100644 src/main/java/net/minestom/server/network/packet/client/login/ClientLoginStartPacket.java delete mode 100644 src/main/java/net/minestom/server/network/packet/client/login/EncryptionResponsePacket.java delete mode 100644 src/main/java/net/minestom/server/network/packet/client/login/LoginPluginResponsePacket.java delete mode 100644 src/main/java/net/minestom/server/network/packet/client/login/LoginStartPacket.java rename src/main/java/net/minestom/server/network/packet/server/{play => common}/DisconnectPacket.java (79%) rename src/main/java/net/minestom/server/network/packet/server/{play => common}/KeepAlivePacket.java (66%) rename src/main/java/net/minestom/server/network/packet/server/{play => common}/PingPacket.java (66%) rename src/main/java/net/minestom/server/network/packet/server/{play => common}/PluginMessagePacket.java (80%) rename src/main/java/net/minestom/server/network/packet/server/{play => common}/ResourcePackSendPacket.java (85%) rename src/main/java/net/minestom/server/network/packet/server/{play => common}/TagsPacket.java (90%) create mode 100644 src/main/java/net/minestom/server/network/packet/server/configuration/FinishConfigurationPacket.java rename src/main/java/net/minestom/server/network/packet/server/{handshake => status}/ResponsePacket.java (77%) diff --git a/src/main/java/net/minestom/server/MinecraftServer.java b/src/main/java/net/minestom/server/MinecraftServer.java index 279acb56b..7387fee2b 100644 --- a/src/main/java/net/minestom/server/MinecraftServer.java +++ b/src/main/java/net/minestom/server/MinecraftServer.java @@ -13,7 +13,7 @@ import net.minestom.server.listener.manager.PacketListenerManager; import net.minestom.server.monitoring.BenchmarkManager; import net.minestom.server.network.ConnectionManager; import net.minestom.server.network.PacketProcessor; -import net.minestom.server.network.packet.server.play.PluginMessagePacket; +import net.minestom.server.network.packet.server.common.PluginMessagePacket; import net.minestom.server.network.packet.server.play.ServerDifficultyPacket; import net.minestom.server.network.socket.Server; import net.minestom.server.recipe.RecipeManager; @@ -44,8 +44,8 @@ public final class MinecraftServer { public static final ComponentLogger LOGGER = ComponentLogger.logger(MinecraftServer.class); - public static final String VERSION_NAME = "1.20.1"; - public static final int PROTOCOL_VERSION = 763; + public static final String VERSION_NAME = "1.20.2"; + public static final int PROTOCOL_VERSION = 764; // Threads public static final String THREAD_NAME_BENCHMARK = "Ms-Benchmark"; diff --git a/src/main/java/net/minestom/server/ServerProcessImpl.java b/src/main/java/net/minestom/server/ServerProcessImpl.java index cde235f8d..4cf769988 100644 --- a/src/main/java/net/minestom/server/ServerProcessImpl.java +++ b/src/main/java/net/minestom/server/ServerProcessImpl.java @@ -46,8 +46,8 @@ final class ServerProcessImpl implements ServerProcess { private final ExceptionManager exception; private final ConnectionManager connection; - private final PacketProcessor packetProcessor; private final PacketListenerManager packetListener; + private final PacketProcessor packetProcessor; private final InstanceManager instance; private final BlockManager block; private final CommandManager command; @@ -72,8 +72,8 @@ final class ServerProcessImpl implements ServerProcess { public ServerProcessImpl() throws IOException { this.exception = new ExceptionManager(); this.connection = new ConnectionManager(); - this.packetProcessor = new PacketProcessor(); - this.packetListener = new PacketListenerManager(this); + this.packetListener = new PacketListenerManager(); + this.packetProcessor = new PacketProcessor(packetListener); this.instance = new InstanceManager(); this.block = new BlockManager(); this.command = new CommandManager(); diff --git a/src/main/java/net/minestom/server/entity/Player.java b/src/main/java/net/minestom/server/entity/Player.java index 0cdf342de..f19a4ccc5 100644 --- a/src/main/java/net/minestom/server/entity/Player.java +++ b/src/main/java/net/minestom/server/entity/Player.java @@ -59,6 +59,7 @@ import net.minestom.server.network.PlayerProvider; import net.minestom.server.network.packet.client.ClientPacket; import net.minestom.server.network.packet.server.SendablePacket; import net.minestom.server.network.packet.server.ServerPacket; +import net.minestom.server.network.packet.server.common.*; import net.minestom.server.network.packet.server.login.LoginDisconnectPacket; import net.minestom.server.network.packet.server.play.*; import net.minestom.server.network.packet.server.play.data.DeathLocation; @@ -246,6 +247,9 @@ public class Player extends LivingEntity implements CommandSender, Localizable, .withDynamic(Identity.NAME, this::getUsername) .withDynamic(Identity.DISPLAY_NAME, this::getDisplayName) .build(); + + // When in configuration state no metadata updates can be sent. + metadata.setNotifyAboutChanges(false); } /** @@ -1947,7 +1951,7 @@ public class Player extends LivingEntity implements CommandSender, Localizable, } final PacketListenerManager manager = MinecraftServer.getPacketListenerManager(); // This method is NOT thread-safe - this.packets.drain(packet -> manager.processClientPacket(packet, this), PACKET_PER_TICK); + this.packets.drain(packet -> manager.processClientPacket(playerConnection.getConnectionState(), packet, playerConnection), PACKET_PER_TICK); } /** @@ -1957,7 +1961,9 @@ public class Player extends LivingEntity implements CommandSender, Localizable, */ public void refreshLatency(int latency) { this.latency = latency; - PacketUtils.broadcastPacket(new PlayerInfoUpdatePacket(PlayerInfoUpdatePacket.Action.UPDATE_LATENCY, infoEntry())); + if (getPlayerConnection().getConnectionState() == ConnectionState.PLAY) { + PacketUtils.broadcastPacket(new PlayerInfoUpdatePacket(PlayerInfoUpdatePacket.Action.UPDATE_LATENCY, infoEntry())); + } } public void refreshOnGround(boolean onGround) { @@ -2368,10 +2374,11 @@ public class Player extends LivingEntity implements CommandSender, Localizable, this.allowServerListings = allowServerListings; // TODO: Use the metadata object here - metadata.setNotifyAboutChanges(false); + boolean isInPlayState = getPlayerConnection().getConnectionState() == ConnectionState.PLAY; + if (isInPlayState) metadata.setNotifyAboutChanges(false); metadata.setIndex((byte) 17, Metadata.Byte(displayedSkinParts)); metadata.setIndex((byte) 18, Metadata.Byte((byte) (this.mainHand == MainHand.RIGHT ? 1 : 0))); - metadata.setNotifyAboutChanges(true); + if (isInPlayState) metadata.setNotifyAboutChanges(true); } } diff --git a/src/main/java/net/minestom/server/entity/fakeplayer/FakePlayer.java b/src/main/java/net/minestom/server/entity/fakeplayer/FakePlayer.java index 8d85a70cb..bec4da000 100644 --- a/src/main/java/net/minestom/server/entity/fakeplayer/FakePlayer.java +++ b/src/main/java/net/minestom/server/entity/fakeplayer/FakePlayer.java @@ -67,7 +67,7 @@ public class FakePlayer extends Player implements NavigableEntity { }).build(); MinecraftServer.getGlobalEventHandler().addListener(spawnListener); } - CONNECTION_MANAGER.startPlayState(this, option.isRegistered()); + CONNECTION_MANAGER.startConfigurationState(this, option.isRegistered()); } /** diff --git a/src/main/java/net/minestom/server/entity/fakeplayer/FakePlayerController.java b/src/main/java/net/minestom/server/entity/fakeplayer/FakePlayerController.java index 841e274ae..0d779bfc9 100644 --- a/src/main/java/net/minestom/server/entity/fakeplayer/FakePlayerController.java +++ b/src/main/java/net/minestom/server/entity/fakeplayer/FakePlayerController.java @@ -9,10 +9,12 @@ import net.minestom.server.inventory.Inventory; import net.minestom.server.inventory.PlayerInventory; import net.minestom.server.item.ItemStack; import net.minestom.server.network.packet.client.ClientPacket; +import net.minestom.server.network.packet.client.common.ClientKeepAlivePacket; +import net.minestom.server.network.packet.client.common.ClientPluginMessagePacket; import net.minestom.server.network.packet.client.play.*; import net.minestom.server.network.packet.server.SendablePacket; import net.minestom.server.network.packet.server.ServerPacket; -import net.minestom.server.network.packet.server.play.KeepAlivePacket; +import net.minestom.server.network.packet.server.common.KeepAlivePacket; import net.minestom.server.network.packet.server.play.PlayerPositionAndLookPacket; import net.minestom.server.network.player.PlayerConnection; import net.minestom.server.utils.MathUtils; diff --git a/src/main/java/net/minestom/server/event/player/PlayerPluginMessageEvent.java b/src/main/java/net/minestom/server/event/player/PlayerPluginMessageEvent.java index cb00028e2..aee14e3d8 100644 --- a/src/main/java/net/minestom/server/event/player/PlayerPluginMessageEvent.java +++ b/src/main/java/net/minestom/server/event/player/PlayerPluginMessageEvent.java @@ -2,10 +2,11 @@ package net.minestom.server.event.player; import net.minestom.server.entity.Player; import net.minestom.server.event.trait.PlayerInstanceEvent; +import net.minestom.server.network.packet.client.common.ClientPluginMessagePacket; import org.jetbrains.annotations.NotNull; /** - * Called when a player send {@link net.minestom.server.network.packet.client.play.ClientPluginMessagePacket}. + * Called when a player send {@link ClientPluginMessagePacket}. */ public class PlayerPluginMessageEvent implements PlayerInstanceEvent { diff --git a/src/main/java/net/minestom/server/event/player/UpdateTagListEvent.java b/src/main/java/net/minestom/server/event/player/UpdateTagListEvent.java index 540985584..4d7a2afec 100644 --- a/src/main/java/net/minestom/server/event/player/UpdateTagListEvent.java +++ b/src/main/java/net/minestom/server/event/player/UpdateTagListEvent.java @@ -1,7 +1,7 @@ package net.minestom.server.event.player; import net.minestom.server.event.Event; -import net.minestom.server.network.packet.server.play.TagsPacket; +import net.minestom.server.network.packet.server.common.TagsPacket; import org.jetbrains.annotations.NotNull; @Deprecated diff --git a/src/main/java/net/minestom/server/instance/AnvilLoader.java b/src/main/java/net/minestom/server/instance/AnvilLoader.java index 6cffffb24..fda80b066 100644 --- a/src/main/java/net/minestom/server/instance/AnvilLoader.java +++ b/src/main/java/net/minestom/server/instance/AnvilLoader.java @@ -78,7 +78,6 @@ public class AnvilLoader implements IChunkLoader { @Override public @NotNull CompletableFuture<@Nullable Chunk> loadChunk(@NotNull Instance instance, int chunkX, int chunkZ) { - LOGGER.debug("Attempt loading at {} {}", chunkX, chunkZ); if (!Files.exists(path)) { // No world folder return CompletableFuture.completedFuture(null); diff --git a/src/main/java/net/minestom/server/instance/LightingChunk.java b/src/main/java/net/minestom/server/instance/LightingChunk.java index 8f327dda7..c1bf4f16b 100644 --- a/src/main/java/net/minestom/server/instance/LightingChunk.java +++ b/src/main/java/net/minestom/server/instance/LightingChunk.java @@ -10,6 +10,7 @@ import net.minestom.server.instance.block.Block; import net.minestom.server.instance.block.BlockFace; import net.minestom.server.instance.block.BlockHandler; import net.minestom.server.instance.light.Light; +import net.minestom.server.network.ConnectionState; import net.minestom.server.network.packet.server.CachedPacket; import net.minestom.server.network.packet.server.play.data.LightData; import net.minestom.server.timer.ExecutionType; @@ -281,7 +282,7 @@ public class LightingChunk extends DynamicChunk { // Load all the lighting for (LightingChunk f : copy) { if (f.isLoaded()) { - f.lightCache.body(); + f.lightCache.body(ConnectionState.PLAY); } } diff --git a/src/main/java/net/minestom/server/listener/StatusListener.java b/src/main/java/net/minestom/server/listener/PlayStatusListener.java similarity index 97% rename from src/main/java/net/minestom/server/listener/StatusListener.java rename to src/main/java/net/minestom/server/listener/PlayStatusListener.java index 4864e0bc7..d78c6123a 100644 --- a/src/main/java/net/minestom/server/listener/StatusListener.java +++ b/src/main/java/net/minestom/server/listener/PlayStatusListener.java @@ -9,7 +9,7 @@ import java.util.ArrayList; import java.util.List; import java.util.Map; -public class StatusListener { +public class PlayStatusListener { public static void listener(ClientStatusPacket packet, Player player) { switch (packet.action()) { diff --git a/src/main/java/net/minestom/server/listener/WindowListener.java b/src/main/java/net/minestom/server/listener/WindowListener.java index de406579b..f56b785c3 100644 --- a/src/main/java/net/minestom/server/listener/WindowListener.java +++ b/src/main/java/net/minestom/server/listener/WindowListener.java @@ -9,8 +9,8 @@ import net.minestom.server.inventory.PlayerInventory; import net.minestom.server.item.ItemStack; import net.minestom.server.network.packet.client.play.ClientClickWindowPacket; import net.minestom.server.network.packet.client.play.ClientCloseWindowPacket; -import net.minestom.server.network.packet.client.play.ClientPongPacket; -import net.minestom.server.network.packet.server.play.PingPacket; +import net.minestom.server.network.packet.client.common.ClientPongPacket; +import net.minestom.server.network.packet.server.common.PingPacket; import net.minestom.server.network.packet.server.play.SetSlotPacket; public class WindowListener { diff --git a/src/main/java/net/minestom/server/listener/KeepAliveListener.java b/src/main/java/net/minestom/server/listener/common/KeepAliveListener.java similarity index 85% rename from src/main/java/net/minestom/server/listener/KeepAliveListener.java rename to src/main/java/net/minestom/server/listener/common/KeepAliveListener.java index a456aad05..3173e8a95 100644 --- a/src/main/java/net/minestom/server/listener/KeepAliveListener.java +++ b/src/main/java/net/minestom/server/listener/common/KeepAliveListener.java @@ -1,9 +1,9 @@ -package net.minestom.server.listener; +package net.minestom.server.listener.common; import net.kyori.adventure.text.Component; import net.kyori.adventure.text.format.NamedTextColor; import net.minestom.server.entity.Player; -import net.minestom.server.network.packet.client.play.ClientKeepAlivePacket; +import net.minestom.server.network.packet.client.common.ClientKeepAlivePacket; public final class KeepAliveListener { private static final Component KICK_MESSAGE = Component.text("Bad Keep Alive packet", NamedTextColor.RED); diff --git a/src/main/java/net/minestom/server/listener/PluginMessageListener.java b/src/main/java/net/minestom/server/listener/common/PluginMessageListener.java similarity index 78% rename from src/main/java/net/minestom/server/listener/PluginMessageListener.java rename to src/main/java/net/minestom/server/listener/common/PluginMessageListener.java index 2e85b2f17..68004eca1 100644 --- a/src/main/java/net/minestom/server/listener/PluginMessageListener.java +++ b/src/main/java/net/minestom/server/listener/common/PluginMessageListener.java @@ -1,9 +1,9 @@ -package net.minestom.server.listener; +package net.minestom.server.listener.common; import net.minestom.server.entity.Player; import net.minestom.server.event.EventDispatcher; import net.minestom.server.event.player.PlayerPluginMessageEvent; -import net.minestom.server.network.packet.client.play.ClientPluginMessagePacket; +import net.minestom.server.network.packet.client.common.ClientPluginMessagePacket; public class PluginMessageListener { diff --git a/src/main/java/net/minestom/server/listener/ResourcePackListener.java b/src/main/java/net/minestom/server/listener/common/ResourcePackListener.java similarity index 74% rename from src/main/java/net/minestom/server/listener/ResourcePackListener.java rename to src/main/java/net/minestom/server/listener/common/ResourcePackListener.java index a88db1cb8..71946b799 100644 --- a/src/main/java/net/minestom/server/listener/ResourcePackListener.java +++ b/src/main/java/net/minestom/server/listener/common/ResourcePackListener.java @@ -1,9 +1,9 @@ -package net.minestom.server.listener; +package net.minestom.server.listener.common; import net.minestom.server.entity.Player; import net.minestom.server.event.EventDispatcher; import net.minestom.server.event.player.PlayerResourcePackStatusEvent; -import net.minestom.server.network.packet.client.play.ClientResourcePackStatusPacket; +import net.minestom.server.network.packet.client.common.ClientResourcePackStatusPacket; public class ResourcePackListener { diff --git a/src/main/java/net/minestom/server/listener/SettingsListener.java b/src/main/java/net/minestom/server/listener/common/SettingsListener.java similarity index 85% rename from src/main/java/net/minestom/server/listener/SettingsListener.java rename to src/main/java/net/minestom/server/listener/common/SettingsListener.java index 92fe6ce94..8d25bfe1d 100644 --- a/src/main/java/net/minestom/server/listener/SettingsListener.java +++ b/src/main/java/net/minestom/server/listener/common/SettingsListener.java @@ -1,9 +1,9 @@ -package net.minestom.server.listener; +package net.minestom.server.listener.common; import net.minestom.server.entity.Player; import net.minestom.server.event.EventDispatcher; import net.minestom.server.event.player.PlayerSettingsChangeEvent; -import net.minestom.server.network.packet.client.play.ClientSettingsPacket; +import net.minestom.server.network.packet.client.common.ClientSettingsPacket; public final class SettingsListener { public static void listener(ClientSettingsPacket packet, Player player) { diff --git a/src/main/java/net/minestom/server/listener/manager/PacketListenerManager.java b/src/main/java/net/minestom/server/listener/manager/PacketListenerManager.java index dae1178bd..87c1391ac 100644 --- a/src/main/java/net/minestom/server/listener/manager/PacketListenerManager.java +++ b/src/main/java/net/minestom/server/listener/manager/PacketListenerManager.java @@ -1,13 +1,30 @@ package net.minestom.server.listener.manager; import net.minestom.server.MinecraftServer; -import net.minestom.server.ServerProcess; -import net.minestom.server.entity.Player; import net.minestom.server.event.EventDispatcher; import net.minestom.server.event.player.PlayerPacketEvent; import net.minestom.server.listener.*; +import net.minestom.server.listener.common.KeepAliveListener; +import net.minestom.server.listener.common.PluginMessageListener; +import net.minestom.server.listener.common.ResourcePackListener; +import net.minestom.server.listener.common.SettingsListener; +import net.minestom.server.listener.preplay.ConfigurationListener; +import net.minestom.server.listener.preplay.HandshakeListener; +import net.minestom.server.listener.preplay.LoginListener; +import net.minestom.server.listener.preplay.StatusListener; +import net.minestom.server.network.ConnectionState; import net.minestom.server.network.packet.client.ClientPacket; +import net.minestom.server.network.packet.client.common.*; +import net.minestom.server.network.packet.client.configuration.ClientFinishConfigurationPacket; +import net.minestom.server.network.packet.client.handshake.ClientHandshakePacket; +import net.minestom.server.network.packet.client.login.ClientEncryptionResponsePacket; +import net.minestom.server.network.packet.client.login.ClientLoginAcknowledgedPacket; +import net.minestom.server.network.packet.client.login.ClientLoginPluginResponsePacket; +import net.minestom.server.network.packet.client.login.ClientLoginStartPacket; import net.minestom.server.network.packet.client.play.*; +import net.minestom.server.network.packet.client.status.PingPacket; +import net.minestom.server.network.packet.client.status.StatusRequestPacket; +import net.minestom.server.network.player.PlayerConnection; import org.jetbrains.annotations.NotNull; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -18,81 +35,113 @@ import java.util.concurrent.ConcurrentHashMap; public final class PacketListenerManager { private final static Logger LOGGER = LoggerFactory.getLogger(PacketListenerManager.class); - private final ServerProcess serverProcess; - private final Map, PacketListenerConsumer> listeners = new ConcurrentHashMap<>(); + private final Map, PacketPrePlayListenerConsumer>[] listeners = new Map[ConnectionState.values().length]; - public PacketListenerManager(ServerProcess serverProcess) { - this.serverProcess = serverProcess; + public PacketListenerManager() { + for (int i = 0; i < listeners.length; i++) { + listeners[i] = new ConcurrentHashMap<>(); + } - setListener(ClientKeepAlivePacket.class, KeepAliveListener::listener); - setListener(ClientCommandChatPacket.class, ChatMessageListener::commandChatListener); - setListener(ClientChatMessagePacket.class, ChatMessageListener::chatMessageListener); - setListener(ClientClickWindowPacket.class, WindowListener::clickWindowListener); - setListener(ClientCloseWindowPacket.class, WindowListener::closeWindowListener); - setListener(ClientPongPacket.class, WindowListener::pong); - setListener(ClientEntityActionPacket.class, EntityActionListener::listener); - setListener(ClientHeldItemChangePacket.class, PlayerHeldListener::heldListener); - setListener(ClientPlayerBlockPlacementPacket.class, BlockPlacementListener::listener); - setListener(ClientSteerVehiclePacket.class, PlayerVehicleListener::steerVehicleListener); - setListener(ClientVehicleMovePacket.class, PlayerVehicleListener::vehicleMoveListener); - setListener(ClientSteerBoatPacket.class, PlayerVehicleListener::boatSteerListener); - setListener(ClientPlayerPacket.class, PlayerPositionListener::playerPacketListener); - setListener(ClientPlayerRotationPacket.class, PlayerPositionListener::playerLookListener); - setListener(ClientPlayerPositionPacket.class, PlayerPositionListener::playerPositionListener); - setListener(ClientPlayerPositionAndRotationPacket.class, PlayerPositionListener::playerPositionAndLookListener); - setListener(ClientTeleportConfirmPacket.class, PlayerPositionListener::teleportConfirmListener); - setListener(ClientPlayerDiggingPacket.class, PlayerDiggingListener::playerDiggingListener); - setListener(ClientAnimationPacket.class, AnimationListener::animationListener); - setListener(ClientInteractEntityPacket.class, UseEntityListener::useEntityListener); - setListener(ClientUseItemPacket.class, UseItemListener::useItemListener); - setListener(ClientStatusPacket.class, StatusListener::listener); - setListener(ClientSettingsPacket.class, SettingsListener::listener); - setListener(ClientCreativeInventoryActionPacket.class, CreativeInventoryActionListener::listener); - setListener(ClientCraftRecipeRequest.class, RecipeListener::listener); - setListener(ClientTabCompletePacket.class, TabCompleteListener::listener); - setListener(ClientPluginMessagePacket.class, PluginMessageListener::listener); - setListener(ClientPlayerAbilitiesPacket.class, AbilitiesListener::listener); - setListener(ClientResourcePackStatusPacket.class, ResourcePackListener::listener); - setListener(ClientAdvancementTabPacket.class, AdvancementTabListener::listener); - setListener(ClientSpectatePacket.class, SpectateListener::listener); - setListener(ClientEditBookPacket.class, BookListener::listener); + setListener(ConnectionState.HANDSHAKE, ClientHandshakePacket.class, HandshakeListener::listener); + + setListener(ConnectionState.STATUS, StatusRequestPacket.class, StatusListener::requestListener); + setListener(ConnectionState.STATUS, PingPacket.class, StatusListener::pingListener); + + setListener(ConnectionState.LOGIN, ClientLoginStartPacket.class, LoginListener::loginStartListener); + setListener(ConnectionState.LOGIN, ClientEncryptionResponsePacket.class, LoginListener::loginEncryptionResponseListener); + setListener(ConnectionState.LOGIN, ClientLoginPluginResponsePacket.class, LoginListener::loginPluginResponseListener); + setListener(ConnectionState.LOGIN, ClientLoginAcknowledgedPacket.class, LoginListener::loginAckListener); + + setConfigurationListener(ClientSettingsPacket.class, SettingsListener::listener); + setConfigurationListener(ClientPluginMessagePacket.class, PluginMessageListener::listener); + setConfigurationListener(ClientFinishConfigurationPacket.class, ConfigurationListener::finishListener); + setConfigurationListener(ClientKeepAlivePacket.class, KeepAliveListener::listener); + setConfigurationListener(ClientPongPacket.class, (packet, player) -> {/* empty */}); + setConfigurationListener(ClientResourcePackStatusPacket.class, ResourcePackListener::listener); + + setPlayListener(ClientKeepAlivePacket.class, KeepAliveListener::listener); + setPlayListener(ClientCommandChatPacket.class, ChatMessageListener::commandChatListener); + setPlayListener(ClientChatMessagePacket.class, ChatMessageListener::chatMessageListener); + setPlayListener(ClientClickWindowPacket.class, WindowListener::clickWindowListener); + setPlayListener(ClientCloseWindowPacket.class, WindowListener::closeWindowListener); + setPlayListener(ClientPongPacket.class, WindowListener::pong); + setPlayListener(ClientEntityActionPacket.class, EntityActionListener::listener); + setPlayListener(ClientHeldItemChangePacket.class, PlayerHeldListener::heldListener); + setPlayListener(ClientPlayerBlockPlacementPacket.class, BlockPlacementListener::listener); + setPlayListener(ClientSteerVehiclePacket.class, PlayerVehicleListener::steerVehicleListener); + setPlayListener(ClientVehicleMovePacket.class, PlayerVehicleListener::vehicleMoveListener); + setPlayListener(ClientSteerBoatPacket.class, PlayerVehicleListener::boatSteerListener); + setPlayListener(ClientPlayerPacket.class, PlayerPositionListener::playerPacketListener); + setPlayListener(ClientPlayerRotationPacket.class, PlayerPositionListener::playerLookListener); + setPlayListener(ClientPlayerPositionPacket.class, PlayerPositionListener::playerPositionListener); + setPlayListener(ClientPlayerPositionAndRotationPacket.class, PlayerPositionListener::playerPositionAndLookListener); + setPlayListener(ClientTeleportConfirmPacket.class, PlayerPositionListener::teleportConfirmListener); + setPlayListener(ClientPlayerDiggingPacket.class, PlayerDiggingListener::playerDiggingListener); + setPlayListener(ClientAnimationPacket.class, AnimationListener::animationListener); + setPlayListener(ClientInteractEntityPacket.class, UseEntityListener::useEntityListener); + setPlayListener(ClientUseItemPacket.class, UseItemListener::useItemListener); + setPlayListener(ClientStatusPacket.class, PlayStatusListener::listener); + setPlayListener(ClientSettingsPacket.class, SettingsListener::listener); + setPlayListener(ClientCreativeInventoryActionPacket.class, CreativeInventoryActionListener::listener); + setPlayListener(ClientCraftRecipeRequest.class, RecipeListener::listener); + setPlayListener(ClientTabCompletePacket.class, TabCompleteListener::listener); + setPlayListener(ClientPluginMessagePacket.class, PluginMessageListener::listener); + setPlayListener(ClientPlayerAbilitiesPacket.class, AbilitiesListener::listener); + setPlayListener(ClientResourcePackStatusPacket.class, ResourcePackListener::listener); + setPlayListener(ClientAdvancementTabPacket.class, AdvancementTabListener::listener); + setPlayListener(ClientSpectatePacket.class, SpectateListener::listener); + setPlayListener(ClientEditBookPacket.class, BookListener::listener); } /** - * Processes a packet by getting its {@link PacketListenerConsumer} and calling all the packet listeners. + * Processes a packet by getting its {@link PacketPlayListenerConsumer} and calling all the packet listeners. * * @param packet the received packet * @param player the player who sent the packet * @param the packet type */ - public void processClientPacket(@NotNull T packet, @NotNull Player player) { + public void processClientPacket(@NotNull ConnectionState state, @NotNull T packet, @NotNull PlayerConnection connection) { final Class clazz = packet.getClass(); - - PacketListenerConsumer packetListenerConsumer = listeners.get(clazz); + PacketPrePlayListenerConsumer packetListenerConsumer = listeners[state.ordinal()].get(clazz); // Listener can be null if none has been set before, call PacketConsumer anyway if (packetListenerConsumer == null) { LOGGER.warn("Packet " + clazz + " does not have any default listener! (The issue comes from Minestom)"); - } - - // Event - PlayerPacketEvent playerPacketEvent = new PlayerPacketEvent(player, packet); - EventDispatcher.call(playerPacketEvent); - if (playerPacketEvent.isCancelled()) { return; } - // Finally execute the listener - if (packetListenerConsumer != null) { - try { - packetListenerConsumer.accept(packet, player); - } catch (Exception e) { - // Packet is likely invalid - MinecraftServer.getExceptionManager().handleException(e); + // Event + if (state == ConnectionState.PLAY) { + PlayerPacketEvent playerPacketEvent = new PlayerPacketEvent(connection.getPlayer(), packet); + EventDispatcher.call(playerPacketEvent); + if (playerPacketEvent.isCancelled()) { + return; } } + + // Finally execute the listener + try { + packetListenerConsumer.accept(packet, connection); + } catch (Exception e) { + // Packet is likely invalid + MinecraftServer.getExceptionManager().handleException(e); + } + } + + /** + * Sets the listener of a packet. + *

+ * WARNING: this will overwrite the default minestom listener, this is not reversible. + * + * @param state the state of the packet + * @param packetClass the class of the packet + * @param consumer the new packet's listener + * @param the type of the packet + */ + public void setListener(@NotNull ConnectionState state, @NotNull Class packetClass, @NotNull PacketPrePlayListenerConsumer consumer) { + this.listeners[state.ordinal()].put(packetClass, consumer); } /** @@ -104,8 +153,26 @@ public final class PacketListenerManager { * @param consumer the new packet's listener * @param the type of the packet */ - public void setListener(@NotNull Class packetClass, @NotNull PacketListenerConsumer consumer) { - this.listeners.put(packetClass, consumer); + public void setPlayListener(@NotNull Class packetClass, @NotNull PacketPlayListenerConsumer consumer) { + setListener(ConnectionState.PLAY, packetClass, (packet, playerConnection) -> consumer.accept(packet, playerConnection.getPlayer())); + } + + public void setConfigurationListener(@NotNull Class packetClass, @NotNull PacketPlayListenerConsumer consumer) { + setListener(ConnectionState.CONFIGURATION, packetClass, (packet, playerConnection) -> consumer.accept(packet, playerConnection.getPlayer())); + } + + /** + * Sets the listener of a packet. + *

+ * WARNING: this will overwrite the default minestom listener, this is not reversible. + * + * @param packetClass the class of the packet + * @param consumer the new packet's listener + * @param the type of the packet + */ + @Deprecated + public void setListener(@NotNull Class packetClass, @NotNull PacketPlayListenerConsumer consumer) { + setPlayListener(packetClass, consumer); } } diff --git a/src/main/java/net/minestom/server/listener/manager/PacketListenerConsumer.java b/src/main/java/net/minestom/server/listener/manager/PacketPlayListenerConsumer.java similarity index 69% rename from src/main/java/net/minestom/server/listener/manager/PacketListenerConsumer.java rename to src/main/java/net/minestom/server/listener/manager/PacketPlayListenerConsumer.java index 53eb95a10..d0f86ef1a 100644 --- a/src/main/java/net/minestom/server/listener/manager/PacketListenerConsumer.java +++ b/src/main/java/net/minestom/server/listener/manager/PacketPlayListenerConsumer.java @@ -4,11 +4,11 @@ import net.minestom.server.entity.Player; import net.minestom.server.network.packet.client.ClientPacket; /** - * Small convenient interface to use method references with {@link PacketListenerManager#setListener(Class, PacketListenerConsumer)}. + * Small convenient interface to use method references with {@link PacketListenerManager#setListener(Class, PacketPlayListenerConsumer)}. * * @param the packet type */ @FunctionalInterface -public interface PacketListenerConsumer { +public interface PacketPlayListenerConsumer { void accept(T packet, Player player); } diff --git a/src/main/java/net/minestom/server/listener/manager/PacketPrePlayListenerConsumer.java b/src/main/java/net/minestom/server/listener/manager/PacketPrePlayListenerConsumer.java new file mode 100644 index 000000000..0d3ce4ec5 --- /dev/null +++ b/src/main/java/net/minestom/server/listener/manager/PacketPrePlayListenerConsumer.java @@ -0,0 +1,16 @@ +package net.minestom.server.listener.manager; + +import net.minestom.server.entity.Player; +import net.minestom.server.network.ConnectionState; +import net.minestom.server.network.packet.client.ClientPacket; +import net.minestom.server.network.player.PlayerConnection; + +/** + * Small convenient interface to use method references with {@link PacketListenerManager#setListener(ConnectionState, Class, PacketPrePlayListenerConsumer)}. + * + * @param the packet type + */ +@FunctionalInterface +public interface PacketPrePlayListenerConsumer { + void accept(T packet, PlayerConnection connection); +} diff --git a/src/main/java/net/minestom/server/listener/preplay/ConfigurationListener.java b/src/main/java/net/minestom/server/listener/preplay/ConfigurationListener.java new file mode 100644 index 000000000..f663e5b2f --- /dev/null +++ b/src/main/java/net/minestom/server/listener/preplay/ConfigurationListener.java @@ -0,0 +1,13 @@ +package net.minestom.server.listener.preplay; + +import net.minestom.server.entity.Player; +import net.minestom.server.network.packet.client.configuration.ClientFinishConfigurationPacket; +import org.jetbrains.annotations.NotNull; + +public final class ConfigurationListener { + + public static void finishListener(@NotNull ClientFinishConfigurationPacket packet, @NotNull Player player) { + //todo move to play state + System.out.println("Finished configuration for " + player.getUsername() ); + } +} diff --git a/src/main/java/net/minestom/server/network/packet/client/handshake/HandshakePacket.java b/src/main/java/net/minestom/server/listener/preplay/HandshakeListener.java similarity index 72% rename from src/main/java/net/minestom/server/network/packet/client/handshake/HandshakePacket.java rename to src/main/java/net/minestom/server/listener/preplay/HandshakeListener.java index e8922654e..e57ace10f 100644 --- a/src/main/java/net/minestom/server/network/packet/client/handshake/HandshakePacket.java +++ b/src/main/java/net/minestom/server/listener/preplay/HandshakeListener.java @@ -1,4 +1,4 @@ -package net.minestom.server.network.packet.client.handshake; +package net.minestom.server.listener.preplay; import com.google.gson.JsonArray; import com.google.gson.JsonElement; @@ -9,8 +9,7 @@ import net.kyori.adventure.text.format.NamedTextColor; import net.minestom.server.MinecraftServer; import net.minestom.server.extras.bungee.BungeeCordProxy; import net.minestom.server.network.ConnectionState; -import net.minestom.server.network.NetworkBuffer; -import net.minestom.server.network.packet.client.ClientPreplayPacket; +import net.minestom.server.network.packet.client.handshake.ClientHandshakePacket; import net.minestom.server.network.packet.server.login.LoginDisconnectPacket; import net.minestom.server.network.player.GameProfile; import net.minestom.server.network.player.PlayerConnection; @@ -24,12 +23,9 @@ import java.util.ArrayList; import java.util.List; import java.util.UUID; -import static net.minestom.server.network.NetworkBuffer.*; +public final class HandshakeListener { -public record HandshakePacket(int protocolVersion, @NotNull String serverAddress, - int serverPort, int nextState) implements ClientPreplayPacket { - - private final static Logger LOGGER = LoggerFactory.getLogger(HandshakePacket.class); + private final static Logger LOGGER = LoggerFactory.getLogger(HandshakeListener.class); /** * Text sent if a player tries to connect with an invalid version of the client @@ -41,34 +37,10 @@ public record HandshakePacket(int protocolVersion, @NotNull String serverAddress */ private static final Component INVALID_BUNGEE_FORWARDING = Component.text("Invalid connection, please connect through the BungeeCord proxy. If you believe this is an error, contact a server administrator.", NamedTextColor.RED); - public HandshakePacket { - if (serverAddress.length() > getMaxHandshakeLength()) { - throw new IllegalArgumentException("Server address too long: " + serverAddress.length()); - } - } - - public HandshakePacket(@NotNull NetworkBuffer reader) { - this(reader.read(VAR_INT), reader.read(STRING), - reader.read(UNSIGNED_SHORT), reader.read(VAR_INT)); - } - - @Override - public void write(@NotNull NetworkBuffer writer) { - writer.write(VAR_INT, protocolVersion); - int maxLength = getMaxHandshakeLength(); - if (serverAddress.length() > maxLength) { - throw new IllegalArgumentException("serverAddress is " + serverAddress.length() + " characters long, maximum allowed is " + maxLength); - } - writer.write(STRING, serverAddress); - writer.write(UNSIGNED_SHORT, serverPort); - writer.write(VAR_INT, nextState); - } - - @Override - public void process(@NotNull PlayerConnection connection) { - String address = serverAddress; + public static void listener(@NotNull ClientHandshakePacket packet, @NotNull PlayerConnection connection) { + String address = packet.serverAddress(); // Bungee support (IP forwarding) - if (BungeeCordProxy.isEnabled() && connection instanceof PlayerSocketConnection socketConnection && nextState == 2) { + if (BungeeCordProxy.isEnabled() && connection instanceof PlayerSocketConnection socketConnection && packet.nextState() == 2) { final String[] split = address.split("\00"); if (split.length == 3 || split.length == 4) { @@ -135,13 +107,13 @@ public record HandshakePacket(int protocolVersion, @NotNull String serverAddress if (connection instanceof PlayerSocketConnection) { // Give to the connection the server info that the client used - ((PlayerSocketConnection) connection).refreshServerInformation(address, serverPort, protocolVersion); + ((PlayerSocketConnection) connection).refreshServerInformation(address, packet.serverPort(), packet.protocolVersion()); } - switch (nextState) { + switch (packet.nextState()) { case 1 -> connection.setConnectionState(ConnectionState.STATUS); case 2 -> { - if (protocolVersion == MinecraftServer.PROTOCOL_VERSION) { + if (packet.protocolVersion() == MinecraftServer.PROTOCOL_VERSION) { connection.setConnectionState(ConnectionState.LOGIN); } else { // Incorrect client version @@ -154,17 +126,12 @@ public record HandshakePacket(int protocolVersion, @NotNull String serverAddress } } - private static int getMaxHandshakeLength() { - // BungeeGuard limits handshake length to 2500 characters, while vanilla limits it to 255 - return BungeeCordProxy.isEnabled() ? (BungeeCordProxy.isBungeeGuardEnabled() ? 2500 : Short.MAX_VALUE) : 255; - } - - private void disconnect(@NotNull PlayerConnection connection, @NotNull Component reason) { + private static void disconnect(@NotNull PlayerConnection connection, @NotNull Component reason) { connection.sendPacket(new LoginDisconnectPacket(reason)); connection.disconnect(); } - private void bungeeDisconnect(@NotNull PlayerConnection connection) { + private static void bungeeDisconnect(@NotNull PlayerConnection connection) { LOGGER.warn("{} tried to log in without valid BungeeGuard forwarding information.", connection.getIdentifier()); disconnect(connection, INVALID_BUNGEE_FORWARDING); } diff --git a/src/main/java/net/minestom/server/listener/preplay/LoginListener.java b/src/main/java/net/minestom/server/listener/preplay/LoginListener.java new file mode 100644 index 000000000..0b42b983c --- /dev/null +++ b/src/main/java/net/minestom/server/listener/preplay/LoginListener.java @@ -0,0 +1,225 @@ +package net.minestom.server.listener.preplay; + +import com.google.gson.Gson; +import com.google.gson.JsonElement; +import com.google.gson.JsonObject; +import net.kyori.adventure.text.Component; +import net.kyori.adventure.text.format.NamedTextColor; +import net.minestom.server.MinecraftServer; +import net.minestom.server.extras.MojangAuth; +import net.minestom.server.extras.bungee.BungeeCordProxy; +import net.minestom.server.extras.mojangAuth.MojangCrypt; +import net.minestom.server.extras.velocity.VelocityProxy; +import net.minestom.server.network.ConnectionManager; +import net.minestom.server.network.ConnectionState; +import net.minestom.server.network.NetworkBuffer; +import net.minestom.server.network.packet.client.login.ClientEncryptionResponsePacket; +import net.minestom.server.network.packet.client.login.ClientLoginAcknowledgedPacket; +import net.minestom.server.network.packet.client.login.ClientLoginPluginResponsePacket; +import net.minestom.server.network.packet.client.login.ClientLoginStartPacket; +import net.minestom.server.network.packet.server.configuration.FinishConfigurationPacket; +import net.minestom.server.network.packet.server.login.EncryptionRequestPacket; +import net.minestom.server.network.packet.server.login.LoginDisconnectPacket; +import net.minestom.server.network.packet.server.login.LoginPluginRequestPacket; +import net.minestom.server.network.player.GameProfile; +import net.minestom.server.network.player.PlayerConnection; +import net.minestom.server.network.player.PlayerSocketConnection; +import net.minestom.server.utils.async.AsyncUtils; +import org.jetbrains.annotations.NotNull; + +import javax.crypto.SecretKey; +import java.math.BigInteger; +import java.net.*; +import java.net.http.HttpClient; +import java.net.http.HttpRequest; +import java.net.http.HttpResponse; +import java.nio.ByteBuffer; +import java.nio.charset.StandardCharsets; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; +import java.util.UUID; +import java.util.concurrent.ThreadLocalRandom; + +import static net.minestom.server.network.NetworkBuffer.STRING; + +public final class LoginListener { + private static final ConnectionManager CONNECTION_MANAGER = MinecraftServer.getConnectionManager(); + private static final Gson GSON = new Gson(); + + private static final Component ALREADY_CONNECTED = Component.text("You are already on this server", NamedTextColor.RED); + public static final Component INVALID_PROXY_RESPONSE = Component.text("Invalid proxy response!", NamedTextColor.RED); + + public static void loginStartListener(@NotNull ClientLoginStartPacket packet, @NotNull PlayerConnection connection) { + final boolean isSocketConnection = connection instanceof PlayerSocketConnection; + // Proxy support (only for socket clients) and cache the login username + if (isSocketConnection) { + PlayerSocketConnection socketConnection = (PlayerSocketConnection) connection; + socketConnection.UNSAFE_setLoginUsername(packet.username()); + // Velocity support + if (VelocityProxy.isEnabled()) { + final int messageId = ThreadLocalRandom.current().nextInt(); + final String channel = VelocityProxy.PLAYER_INFO_CHANNEL; + // Important in order to retrieve the channel in the response packet + socketConnection.addPluginRequestEntry(messageId, channel); + connection.sendPacket(new LoginPluginRequestPacket(messageId, channel, null)); + return; + } + } + + if (MojangAuth.isEnabled() && isSocketConnection) { + // Mojang auth + if (CONNECTION_MANAGER.getPlayer(packet.username()) != null) { + connection.sendPacket(new LoginDisconnectPacket(ALREADY_CONNECTED)); + connection.disconnect(); + return; + } + final PlayerSocketConnection socketConnection = (PlayerSocketConnection) connection; + socketConnection.setConnectionState(ConnectionState.LOGIN); + + final byte[] publicKey = MojangAuth.getKeyPair().getPublic().getEncoded(); + byte[] nonce = new byte[4]; + ThreadLocalRandom.current().nextBytes(nonce); + socketConnection.setNonce(nonce); + socketConnection.sendPacket(new EncryptionRequestPacket("", publicKey, nonce)); + } else { + final boolean bungee = BungeeCordProxy.isEnabled(); + // Offline + final UUID playerUuid = bungee && isSocketConnection ? + ((PlayerSocketConnection) connection).gameProfile().uuid() : + CONNECTION_MANAGER.getPlayerConnectionUuid(connection, packet.username()); + CONNECTION_MANAGER.startConfigurationState(connection, playerUuid, packet.username(), true); + } + } + + public static void loginEncryptionResponseListener(@NotNull ClientEncryptionResponsePacket packet, @NotNull PlayerConnection connection) { + // Encryption is only support for socket connection + if (!(connection instanceof PlayerSocketConnection socketConnection)) return; + AsyncUtils.runAsync(() -> { + final String loginUsername = socketConnection.getLoginUsername(); + if (loginUsername == null || loginUsername.isEmpty()) { + // Shouldn't happen + return; + } + + final boolean hasPublicKey = connection.playerPublicKey() != null; + final boolean verificationFailed = hasPublicKey || !Arrays.equals(socketConnection.getNonce(), + MojangCrypt.decryptUsingKey(MojangAuth.getKeyPair().getPrivate(), packet.encryptedVerifyToken())); + + if (verificationFailed) { + MinecraftServer.LOGGER.error("Encryption failed for {}", loginUsername); + return; + } + + final byte[] digestedData = MojangCrypt.digestData("", MojangAuth.getKeyPair().getPublic(), getSecretKey(packet.sharedSecret())); + if (digestedData == null) { + // Incorrect key, probably because of the client + MinecraftServer.LOGGER.error("Connection {} failed initializing encryption.", socketConnection.getRemoteAddress()); + connection.disconnect(); + return; + } + // Query Mojang's session server. + final String serverId = new BigInteger(digestedData).toString(16); + final String username = URLEncoder.encode(loginUsername, StandardCharsets.UTF_8); + + final String url = String.format(MojangAuth.AUTH_URL, username, serverId); + // TODO: Add ability to add ip query tag. See: https://wiki.vg/Protocol_Encryption#Authentication + + final HttpClient client = HttpClient.newHttpClient(); + final HttpRequest request = HttpRequest.newBuilder(URI.create(url)).GET().build(); + client.sendAsync(request, HttpResponse.BodyHandlers.ofString()).whenComplete((response, throwable) -> { + if (throwable != null) { + MinecraftServer.getExceptionManager().handleException(throwable); + if (socketConnection.getPlayer() != null) { + socketConnection.getPlayer().kick(Component.text("Failed to contact Mojang's Session Servers (Are they down?)")); + } else { + socketConnection.disconnect(); + } + return; + } + try { + final JsonObject gameProfile = GSON.fromJson(response.body(), JsonObject.class); + if (gameProfile == null) { + // Invalid response + if (socketConnection.getPlayer() != null) { + socketConnection.getPlayer().kick(Component.text("Failed to get data from Mojang's Session Servers (Are they down?)")); + } else { + socketConnection.disconnect(); + } + return; + } + socketConnection.setEncryptionKey(getSecretKey(packet.sharedSecret())); + UUID profileUUID = java.util.UUID.fromString(gameProfile.get("id").getAsString() + .replaceFirst("(\\w{8})(\\w{4})(\\w{4})(\\w{4})(\\w{12})", "$1-$2-$3-$4-$5")); + final String profileName = gameProfile.get("name").getAsString(); + + MinecraftServer.LOGGER.info("UUID of player {} is {}", loginUsername, profileUUID); + CONNECTION_MANAGER.startConfigurationState(connection, profileUUID, profileName, true); + List propertyList = new ArrayList<>(); + for (JsonElement element : gameProfile.get("properties").getAsJsonArray()) { + JsonObject object = element.getAsJsonObject(); + propertyList.add(new GameProfile.Property(object.get("name").getAsString(), object.get("value").getAsString(), object.get("signature").getAsString())); + } + socketConnection.UNSAFE_setProfile(new GameProfile(profileUUID, profileName, propertyList)); + } catch (Exception e) { + MinecraftServer.getExceptionManager().handleException(e); + } + }); + }); + } + + private static SecretKey getSecretKey(byte[] sharedSecret) { + return MojangCrypt.decryptByteToSecretKey(MojangAuth.getKeyPair().getPrivate(), sharedSecret); + } + + public static void loginPluginResponseListener(@NotNull ClientLoginPluginResponsePacket packet, @NotNull PlayerConnection connection) { + // Proxy support + if (connection instanceof PlayerSocketConnection socketConnection) { + final String channel = socketConnection.getPluginRequestChannel(packet.messageId()); + if (channel != null) { + boolean success = false; + + SocketAddress socketAddress = null; + GameProfile gameProfile = null; + + // Velocity + if (VelocityProxy.isEnabled() && channel.equals(VelocityProxy.PLAYER_INFO_CHANNEL)) { + byte[] data = packet.data(); + if (data != null && data.length > 0) { + NetworkBuffer buffer = new NetworkBuffer(ByteBuffer.wrap(data)); + success = VelocityProxy.checkIntegrity(buffer); + if (success) { + // Get the real connection address + final InetAddress address; + try { + address = InetAddress.getByName(buffer.read(STRING)); + } catch (UnknownHostException e) { + MinecraftServer.getExceptionManager().handleException(e); + return; + } + final int port = ((java.net.InetSocketAddress) connection.getRemoteAddress()).getPort(); + socketAddress = new InetSocketAddress(address, port); + gameProfile = new GameProfile(buffer); + } + } + } + + if (success) { + socketConnection.setRemoteAddress(socketAddress); + socketConnection.UNSAFE_setProfile(gameProfile); + CONNECTION_MANAGER.startConfigurationState(connection, gameProfile.uuid(), gameProfile.name(), true); + } else { + LoginDisconnectPacket disconnectPacket = new LoginDisconnectPacket(INVALID_PROXY_RESPONSE); + socketConnection.sendPacket(disconnectPacket); + } + } + } + } + + public static void loginAckListener(@NotNull ClientLoginAcknowledgedPacket packet, @NotNull PlayerConnection connection) { + connection.setConnectionState(ConnectionState.CONFIGURATION); + + connection.sendPacket(new FinishConfigurationPacket()); + } + +} diff --git a/src/main/java/net/minestom/server/listener/preplay/StatusListener.java b/src/main/java/net/minestom/server/listener/preplay/StatusListener.java new file mode 100644 index 000000000..7c07de39d --- /dev/null +++ b/src/main/java/net/minestom/server/listener/preplay/StatusListener.java @@ -0,0 +1,43 @@ +package net.minestom.server.listener.preplay; + +import net.minestom.server.MinecraftServer; +import net.minestom.server.event.EventDispatcher; +import net.minestom.server.event.server.ClientPingServerEvent; +import net.minestom.server.event.server.ServerListPingEvent; +import net.minestom.server.network.packet.client.status.PingPacket; +import net.minestom.server.network.packet.client.status.StatusRequestPacket; +import net.minestom.server.network.packet.server.status.PongPacket; +import net.minestom.server.network.packet.server.status.ResponsePacket; +import net.minestom.server.network.player.PlayerConnection; +import net.minestom.server.ping.ServerListPingType; +import org.jetbrains.annotations.NotNull; + +public final class StatusListener { + + public static void requestListener(@NotNull StatusRequestPacket packet, @NotNull PlayerConnection connection) { + final ServerListPingType pingVersion = ServerListPingType.fromModernProtocolVersion(connection.getProtocolVersion()); + final ServerListPingEvent statusRequestEvent = new ServerListPingEvent(connection, pingVersion); + EventDispatcher.callCancellable(statusRequestEvent, () -> + connection.sendPacket(new ResponsePacket(pingVersion.getPingResponse(statusRequestEvent.getResponseData())))); + } + + public static void pingListener(@NotNull PingPacket packet, @NotNull PlayerConnection connection) { + final ClientPingServerEvent clientPingEvent = new ClientPingServerEvent(connection, packet.number()); + EventDispatcher.call(clientPingEvent); + + if (clientPingEvent.isCancelled()) { + connection.disconnect(); + } else { + if (clientPingEvent.getDelay().isZero()) { + connection.sendPacket(new PongPacket(clientPingEvent.getPayload())); + connection.disconnect(); + } else { + MinecraftServer.getSchedulerManager().buildTask(() -> { + connection.sendPacket(new PongPacket(clientPingEvent.getPayload())); + connection.disconnect(); + }).delay(clientPingEvent.getDelay()).schedule(); + } + } + } + +} diff --git a/src/main/java/net/minestom/server/network/ConnectionManager.java b/src/main/java/net/minestom/server/network/ConnectionManager.java index b080de14e..c917240ee 100644 --- a/src/main/java/net/minestom/server/network/ConnectionManager.java +++ b/src/main/java/net/minestom/server/network/ConnectionManager.java @@ -8,8 +8,9 @@ import net.minestom.server.event.EventDispatcher; import net.minestom.server.event.player.AsyncPlayerPreLoginEvent; import net.minestom.server.event.player.PlayerLoginEvent; import net.minestom.server.instance.Instance; +import net.minestom.server.network.packet.client.login.ClientLoginStartPacket; import net.minestom.server.network.packet.server.login.LoginSuccessPacket; -import net.minestom.server.network.packet.server.play.KeepAlivePacket; +import net.minestom.server.network.packet.server.common.KeepAlivePacket; import net.minestom.server.network.player.PlayerConnection; import net.minestom.server.network.player.PlayerSocketConnection; import net.minestom.server.utils.StringUtils; @@ -135,7 +136,7 @@ public final class ConnectionManager { /** * Computes the UUID of the specified connection. - * Used in {@link net.minestom.server.network.packet.client.login.LoginStartPacket} in order + * Used in {@link ClientLoginStartPacket} in order * to give the player the right {@link UUID}. * * @param playerConnection the player connection @@ -184,6 +185,47 @@ public final class ConnectionManager { this.players.remove(player); } + public @NotNull Player startConfigurationState(@NotNull PlayerConnection connection, + @NotNull UUID uuid, @NotNull String username, + boolean register) { + final Player player = playerProvider.createPlayer(uuid, username, connection); + startConfigurationState(player, register); + return player; + } + + public CompletableFuture startConfigurationState(@NotNull Player player, boolean register) { + return AsyncUtils.runAsync(() -> { + final PlayerConnection playerConnection = player.getPlayerConnection(); + // Compression + if (playerConnection instanceof PlayerSocketConnection socketConnection) { + final int threshold = MinecraftServer.getCompressionThreshold(); + if (threshold > 0) socketConnection.startCompression(); + } + // Call pre login event + AsyncPlayerPreLoginEvent asyncPlayerPreLoginEvent = new AsyncPlayerPreLoginEvent(player); + EventDispatcher.call(asyncPlayerPreLoginEvent); + if (!player.isOnline()) + return; // Player has been kicked + // Change UUID/Username based on the event + { + final String eventUsername = asyncPlayerPreLoginEvent.getUsername(); + final UUID eventUuid = asyncPlayerPreLoginEvent.getPlayerUuid(); + if (!player.getUsername().equals(eventUsername)) { + player.setUsernameField(eventUsername); + } + if (!player.getUuid().equals(eventUuid)) { + player.setUuid(eventUuid); + } + } + // Send login success packet + LoginSuccessPacket loginSuccessPacket = new LoginSuccessPacket(player.getUuid(), player.getUsername(), 0); + playerConnection.sendPacket(loginSuccessPacket); +// playerConnection.setConnectionState(ConnectionState.CONFIGURATION); +// if (register) registerPlayer(player); // WHEN ENTERING CONFIGURATION THIS SHOULD BE SET +// this.waitingPlayers.relaxedOffer(player); + }); + } + /** * Calls the player initialization callbacks and the event {@link AsyncPlayerPreLoginEvent}. *

@@ -193,7 +235,7 @@ public final class ConnectionManager { * @param player the player * @param register true to register the newly created player in {@link ConnectionManager} lists */ - public CompletableFuture startPlayState(@NotNull Player player, boolean register) { + public CompletableFuture startPlayStateOLD(@NotNull Player player, boolean register) { return AsyncUtils.runAsync(() -> { final PlayerConnection playerConnection = player.getPlayerConnection(); // Compression @@ -233,11 +275,11 @@ public final class ConnectionManager { * @return the newly created player object * @see #startPlayState(Player, boolean) */ - public @NotNull Player startPlayState(@NotNull PlayerConnection connection, + public @NotNull Player startPlayStateOLD(@NotNull PlayerConnection connection, @NotNull UUID uuid, @NotNull String username, boolean register) { final Player player = playerProvider.createPlayer(uuid, username, connection); - startPlayState(player, register); + startPlayStateOLD(player, register); return player; } diff --git a/src/main/java/net/minestom/server/network/ConnectionState.java b/src/main/java/net/minestom/server/network/ConnectionState.java index a729c464e..b93837ec6 100644 --- a/src/main/java/net/minestom/server/network/ConnectionState.java +++ b/src/main/java/net/minestom/server/network/ConnectionState.java @@ -4,5 +4,5 @@ package net.minestom.server.network; * Represents the current connection state of a {@link net.minestom.server.network.player.PlayerConnection}. */ public enum ConnectionState { - UNKNOWN, STATUS, LOGIN, PLAY + HANDSHAKE, STATUS, LOGIN, CONFIGURATION, PLAY } diff --git a/src/main/java/net/minestom/server/network/PacketProcessor.java b/src/main/java/net/minestom/server/network/PacketProcessor.java index dcfbd8b3c..f00285bd5 100644 --- a/src/main/java/net/minestom/server/network/PacketProcessor.java +++ b/src/main/java/net/minestom/server/network/PacketProcessor.java @@ -1,12 +1,11 @@ package net.minestom.server.network; import net.minestom.server.entity.Player; +import net.minestom.server.listener.manager.PacketListenerManager; import net.minestom.server.network.packet.client.ClientPacket; import net.minestom.server.network.packet.client.ClientPacketsHandler; -import net.minestom.server.network.packet.client.ClientPreplayPacket; -import net.minestom.server.network.packet.client.handshake.HandshakePacket; +import net.minestom.server.network.packet.client.handshake.ClientHandshakePacket; import net.minestom.server.network.player.PlayerConnection; -import net.minestom.server.utils.binary.BinaryReader; import org.jetbrains.annotations.NotNull; import java.nio.ByteBuffer; @@ -17,25 +16,34 @@ import java.nio.ByteBuffer; * You can retrieve the different packet handlers per state (status/login/play) * from the {@link ClientPacketsHandler} classes. */ -public record PacketProcessor(@NotNull ClientPacketsHandler statusHandler, - @NotNull ClientPacketsHandler loginHandler, - @NotNull ClientPacketsHandler playHandler) { - public PacketProcessor() { - this(new ClientPacketsHandler.Status(), - new ClientPacketsHandler.Login(), - new ClientPacketsHandler.Play()); +public class PacketProcessor { + private final ClientPacketsHandler statusHandler; + private final ClientPacketsHandler loginHandler; + private final ClientPacketsHandler configurationHandler; + private final ClientPacketsHandler playHandler; + + private final PacketListenerManager packetListenerManager; + + public PacketProcessor(@NotNull PacketListenerManager packetListenerManager) { + statusHandler = new ClientPacketsHandler.Status(); + loginHandler = new ClientPacketsHandler.Login(); + configurationHandler = new ClientPacketsHandler.Configuration(); + playHandler = new ClientPacketsHandler.Play(); + + this.packetListenerManager = packetListenerManager; } public @NotNull ClientPacket create(@NotNull ConnectionState connectionState, int packetId, ByteBuffer body) { NetworkBuffer buffer = new NetworkBuffer(body); final ClientPacket clientPacket = switch (connectionState) { - case PLAY -> playHandler.create(packetId, buffer); - case LOGIN -> loginHandler.create(packetId, buffer); - case STATUS -> statusHandler.create(packetId, buffer); - case UNKNOWN -> { + case HANDSHAKE -> { assert packetId == 0; - yield new HandshakePacket(buffer); + yield new ClientHandshakePacket(buffer); } + case STATUS -> statusHandler.create(packetId, buffer); + case LOGIN -> loginHandler.create(packetId, buffer); + case CONFIGURATION -> configurationHandler.create(packetId, buffer); + case PLAY -> playHandler.create(packetId, buffer); }; body.position(buffer.readIndex()); return clientPacket; @@ -43,12 +51,15 @@ public record PacketProcessor(@NotNull ClientPacketsHandler statusHandler, public ClientPacket process(@NotNull PlayerConnection connection, int packetId, ByteBuffer body) { final ClientPacket packet = create(connection.getConnectionState(), packetId, body); - if (packet instanceof ClientPreplayPacket prePlayPacket) { - prePlayPacket.process(connection); - } else { - final Player player = connection.getPlayer(); - assert player != null; - player.addPacketToQueue(packet); + + final ConnectionState state = connection.getConnectionState(); + switch (state) { + case HANDSHAKE, STATUS, LOGIN, CONFIGURATION -> packetListenerManager.processClientPacket(connection.getConnectionState(), packet, connection); + case PLAY -> { + final Player player = connection.getPlayer(); + assert player != null; + player.addPacketToQueue(packet); + } } return packet; } diff --git a/src/main/java/net/minestom/server/network/packet/client/ClientPacketsHandler.java b/src/main/java/net/minestom/server/network/packet/client/ClientPacketsHandler.java index a73d9dcbd..09dc394b9 100644 --- a/src/main/java/net/minestom/server/network/packet/client/ClientPacketsHandler.java +++ b/src/main/java/net/minestom/server/network/packet/client/ClientPacketsHandler.java @@ -1,9 +1,12 @@ package net.minestom.server.network.packet.client; import net.minestom.server.network.NetworkBuffer; -import net.minestom.server.network.packet.client.login.EncryptionResponsePacket; -import net.minestom.server.network.packet.client.login.LoginPluginResponsePacket; -import net.minestom.server.network.packet.client.login.LoginStartPacket; +import net.minestom.server.network.packet.client.common.*; +import net.minestom.server.network.packet.client.configuration.ClientFinishConfigurationPacket; +import net.minestom.server.network.packet.client.login.ClientEncryptionResponsePacket; +import net.minestom.server.network.packet.client.login.ClientLoginAcknowledgedPacket; +import net.minestom.server.network.packet.client.login.ClientLoginPluginResponsePacket; +import net.minestom.server.network.packet.client.login.ClientLoginStartPacket; import net.minestom.server.network.packet.client.play.*; import net.minestom.server.network.packet.client.status.PingPacket; import net.minestom.server.network.packet.client.status.StatusRequestPacket; @@ -18,7 +21,7 @@ import java.util.function.Function; *

* Packets are registered using {@link #register(int, Function)} and created using {@link #create(int, NetworkBuffer)}. */ -public sealed class ClientPacketsHandler permits ClientPacketsHandler.Status, ClientPacketsHandler.Login, ClientPacketsHandler.Play { +public sealed class ClientPacketsHandler permits ClientPacketsHandler.Status, ClientPacketsHandler.Login, ClientPacketsHandler.Configuration, ClientPacketsHandler.Play { private final ObjectArray> suppliers = ObjectArray.singleThread(0x10); private ClientPacketsHandler() { @@ -36,79 +39,109 @@ public sealed class ClientPacketsHandler permits ClientPacketsHandler.Status, Cl } public static final class Status extends ClientPacketsHandler { + private static int nextId = 0; + private static int nextId() { + return nextId++; + } + public Status() { - register(0x00, StatusRequestPacket::new); - register(0x01, PingPacket::new); + register(nextId(), StatusRequestPacket::new); + register(nextId(), PingPacket::new); } } public static final class Login extends ClientPacketsHandler { - public Login() { - register(0x00, LoginStartPacket::new); - register(0x01, EncryptionResponsePacket::new); - register(0x02, LoginPluginResponsePacket::new); + private static int nextId = 0; + private static int nextId() { + return nextId++; } + + public Login() { + register(nextId(), ClientLoginStartPacket::new); + register(nextId(), ClientEncryptionResponsePacket::new); + register(nextId(), ClientLoginPluginResponsePacket::new); + register(nextId(), ClientLoginAcknowledgedPacket::new); + } + } + + public static final class Configuration extends ClientPacketsHandler { + private static int nextId = 0; + private static int nextId() { + return nextId++; + } + + public Configuration() { + register(nextId(), ClientSettingsPacket::new); + register(nextId(), ClientPluginMessagePacket::new); + register(nextId(), ClientFinishConfigurationPacket::new); + register(nextId(), ClientKeepAlivePacket::new); + register(nextId(), ClientPongPacket::new); + register(nextId(), ClientResourcePackStatusPacket::new); + } + } public static final class Play extends ClientPacketsHandler { private static int nextId = 0; - private static int nextPlayId() { + private static int nextId() { return nextId++; } public Play() { - register(nextPlayId(), ClientTeleportConfirmPacket::new); - register(nextPlayId(), ClientQueryBlockNbtPacket::new); - nextPlayId(); // difficulty packet - register(nextPlayId(), ClientChatAckPacket::new); - register(nextPlayId(), ClientCommandChatPacket::new); - register(nextPlayId(), ClientChatMessagePacket::new); - register(nextPlayId(), ClientChatSessionUpdatePacket::new); - register(nextPlayId(), ClientStatusPacket::new); - register(nextPlayId(), ClientSettingsPacket::new); - register(nextPlayId(), ClientTabCompletePacket::new); - register(nextPlayId(), ClientClickWindowButtonPacket::new); - register(nextPlayId(), ClientClickWindowPacket::new); - register(nextPlayId(), ClientCloseWindowPacket::new); - register(nextPlayId(), ClientPluginMessagePacket::new); - register(nextPlayId(), ClientEditBookPacket::new); - register(nextPlayId(), ClientQueryEntityNbtPacket::new); - register(nextPlayId(), ClientInteractEntityPacket::new); - register(nextPlayId(), ClientGenerateStructurePacket::new); - register(nextPlayId(), ClientKeepAlivePacket::new); - nextPlayId(); // lock difficulty - register(nextPlayId(), ClientPlayerPositionPacket::new); - register(nextPlayId(), ClientPlayerPositionAndRotationPacket::new); - register(nextPlayId(), ClientPlayerRotationPacket::new); - register(nextPlayId(), ClientPlayerPacket::new); - register(nextPlayId(), ClientVehicleMovePacket::new); - register(nextPlayId(), ClientSteerBoatPacket::new); - register(nextPlayId(), ClientPickItemPacket::new); - register(nextPlayId(), ClientCraftRecipeRequest::new); - register(nextPlayId(), ClientPlayerAbilitiesPacket::new); - register(nextPlayId(), ClientPlayerDiggingPacket::new); - register(nextPlayId(), ClientEntityActionPacket::new); - register(nextPlayId(), ClientSteerVehiclePacket::new); - register(nextPlayId(), ClientPongPacket::new); - register(nextPlayId(), ClientSetRecipeBookStatePacket::new); - register(nextPlayId(), ClientSetDisplayedRecipePacket::new); - register(nextPlayId(), ClientNameItemPacket::new); - register(nextPlayId(), ClientResourcePackStatusPacket::new); - register(nextPlayId(), ClientAdvancementTabPacket::new); - register(nextPlayId(), ClientSelectTradePacket::new); - register(nextPlayId(), ClientSetBeaconEffectPacket::new); - register(nextPlayId(), ClientHeldItemChangePacket::new); - register(nextPlayId(), ClientUpdateCommandBlockPacket::new); - register(nextPlayId(), ClientUpdateCommandBlockMinecartPacket::new); - register(nextPlayId(), ClientCreativeInventoryActionPacket::new); - nextPlayId(); // Update Jigsaw Block - register(nextPlayId(), ClientUpdateStructureBlockPacket::new); - register(nextPlayId(), ClientUpdateSignPacket::new); - register(nextPlayId(), ClientAnimationPacket::new); - register(nextPlayId(), ClientSpectatePacket::new); - register(nextPlayId(), ClientPlayerBlockPlacementPacket::new); - register(nextPlayId(), ClientUseItemPacket::new); + register(nextId(), ClientTeleportConfirmPacket::new); + register(nextId(), ClientQueryBlockNbtPacket::new); + nextId(); // difficulty packet + register(nextId(), ClientChatAckPacket::new); + register(nextId(), ClientCommandChatPacket::new); + register(nextId(), ClientChatMessagePacket::new); + register(nextId(), ClientChatSessionUpdatePacket::new); + nextId(); // chunk batch received + register(nextId(), ClientStatusPacket::new); + register(nextId(), ClientSettingsPacket::new); + register(nextId(), ClientTabCompletePacket::new); + nextId(); // configuration acknowledged + register(nextId(), ClientClickWindowButtonPacket::new); + register(nextId(), ClientClickWindowPacket::new); + register(nextId(), ClientCloseWindowPacket::new); + register(nextId(), ClientPluginMessagePacket::new); + register(nextId(), ClientEditBookPacket::new); + register(nextId(), ClientQueryEntityNbtPacket::new); + register(nextId(), ClientInteractEntityPacket::new); + register(nextId(), ClientGenerateStructurePacket::new); + register(nextId(), ClientKeepAlivePacket::new); + nextId(); // lock difficulty + register(nextId(), ClientPlayerPositionPacket::new); + register(nextId(), ClientPlayerPositionAndRotationPacket::new); + register(nextId(), ClientPlayerRotationPacket::new); + register(nextId(), ClientPlayerPacket::new); + register(nextId(), ClientVehicleMovePacket::new); + register(nextId(), ClientSteerBoatPacket::new); + register(nextId(), ClientPickItemPacket::new); + register(nextId(), ClientCraftRecipeRequest::new); + register(nextId(), ClientPlayerAbilitiesPacket::new); + register(nextId(), ClientPlayerDiggingPacket::new); + register(nextId(), ClientEntityActionPacket::new); + register(nextId(), ClientSteerVehiclePacket::new); + register(nextId(), ClientPongPacket::new); + register(nextId(), ClientSetRecipeBookStatePacket::new); + register(nextId(), ClientSetDisplayedRecipePacket::new); + register(nextId(), ClientNameItemPacket::new); + register(nextId(), ClientResourcePackStatusPacket::new); + register(nextId(), ClientAdvancementTabPacket::new); + register(nextId(), ClientSelectTradePacket::new); + register(nextId(), ClientSetBeaconEffectPacket::new); + register(nextId(), ClientHeldItemChangePacket::new); + register(nextId(), ClientUpdateCommandBlockPacket::new); + register(nextId(), ClientUpdateCommandBlockMinecartPacket::new); + register(nextId(), ClientCreativeInventoryActionPacket::new); + nextId(); // Update Jigsaw Block + register(nextId(), ClientUpdateStructureBlockPacket::new); + register(nextId(), ClientUpdateSignPacket::new); + register(nextId(), ClientAnimationPacket::new); + register(nextId(), ClientSpectatePacket::new); + register(nextId(), ClientPlayerBlockPlacementPacket::new); + register(nextId(), ClientUseItemPacket::new); } } } diff --git a/src/main/java/net/minestom/server/network/packet/client/ClientPreplayPacket.java b/src/main/java/net/minestom/server/network/packet/client/ClientPreplayPacket.java deleted file mode 100644 index cb9ce84a8..000000000 --- a/src/main/java/net/minestom/server/network/packet/client/ClientPreplayPacket.java +++ /dev/null @@ -1,18 +0,0 @@ -package net.minestom.server.network.packet.client; - -import net.minestom.server.MinecraftServer; -import net.minestom.server.network.ConnectionManager; -import net.minestom.server.network.player.PlayerConnection; -import org.jetbrains.annotations.NotNull; - -public interface ClientPreplayPacket extends ClientPacket { - - ConnectionManager CONNECTION_MANAGER = MinecraftServer.getConnectionManager(); - - /** - * Called when the packet is received. - * - * @param connection the connection who sent the packet - */ - void process(@NotNull PlayerConnection connection); -} diff --git a/src/main/java/net/minestom/server/network/packet/client/play/ClientKeepAlivePacket.java b/src/main/java/net/minestom/server/network/packet/client/common/ClientKeepAlivePacket.java similarity index 89% rename from src/main/java/net/minestom/server/network/packet/client/play/ClientKeepAlivePacket.java rename to src/main/java/net/minestom/server/network/packet/client/common/ClientKeepAlivePacket.java index 60e659678..01db1c1d5 100644 --- a/src/main/java/net/minestom/server/network/packet/client/play/ClientKeepAlivePacket.java +++ b/src/main/java/net/minestom/server/network/packet/client/common/ClientKeepAlivePacket.java @@ -1,4 +1,4 @@ -package net.minestom.server.network.packet.client.play; +package net.minestom.server.network.packet.client.common; import net.minestom.server.network.NetworkBuffer; import net.minestom.server.network.packet.client.ClientPacket; diff --git a/src/main/java/net/minestom/server/network/packet/client/play/ClientPluginMessagePacket.java b/src/main/java/net/minestom/server/network/packet/client/common/ClientPluginMessagePacket.java similarity index 93% rename from src/main/java/net/minestom/server/network/packet/client/play/ClientPluginMessagePacket.java rename to src/main/java/net/minestom/server/network/packet/client/common/ClientPluginMessagePacket.java index 16ac11275..d67034c32 100644 --- a/src/main/java/net/minestom/server/network/packet/client/play/ClientPluginMessagePacket.java +++ b/src/main/java/net/minestom/server/network/packet/client/common/ClientPluginMessagePacket.java @@ -1,4 +1,4 @@ -package net.minestom.server.network.packet.client.play; +package net.minestom.server.network.packet.client.common; import net.minestom.server.network.NetworkBuffer; import net.minestom.server.network.packet.client.ClientPacket; diff --git a/src/main/java/net/minestom/server/network/packet/client/play/ClientPongPacket.java b/src/main/java/net/minestom/server/network/packet/client/common/ClientPongPacket.java similarity index 89% rename from src/main/java/net/minestom/server/network/packet/client/play/ClientPongPacket.java rename to src/main/java/net/minestom/server/network/packet/client/common/ClientPongPacket.java index d3ef187e4..a7ab7dac6 100644 --- a/src/main/java/net/minestom/server/network/packet/client/play/ClientPongPacket.java +++ b/src/main/java/net/minestom/server/network/packet/client/common/ClientPongPacket.java @@ -1,4 +1,4 @@ -package net.minestom.server.network.packet.client.play; +package net.minestom.server.network.packet.client.common; import net.minestom.server.network.NetworkBuffer; import net.minestom.server.network.packet.client.ClientPacket; diff --git a/src/main/java/net/minestom/server/network/packet/client/play/ClientResourcePackStatusPacket.java b/src/main/java/net/minestom/server/network/packet/client/common/ClientResourcePackStatusPacket.java similarity index 91% rename from src/main/java/net/minestom/server/network/packet/client/play/ClientResourcePackStatusPacket.java rename to src/main/java/net/minestom/server/network/packet/client/common/ClientResourcePackStatusPacket.java index f998c3a18..d0776c5b0 100644 --- a/src/main/java/net/minestom/server/network/packet/client/play/ClientResourcePackStatusPacket.java +++ b/src/main/java/net/minestom/server/network/packet/client/common/ClientResourcePackStatusPacket.java @@ -1,4 +1,4 @@ -package net.minestom.server.network.packet.client.play; +package net.minestom.server.network.packet.client.common; import net.minestom.server.network.NetworkBuffer; import net.minestom.server.network.packet.client.ClientPacket; diff --git a/src/main/java/net/minestom/server/network/packet/client/play/ClientSettingsPacket.java b/src/main/java/net/minestom/server/network/packet/client/common/ClientSettingsPacket.java similarity index 96% rename from src/main/java/net/minestom/server/network/packet/client/play/ClientSettingsPacket.java rename to src/main/java/net/minestom/server/network/packet/client/common/ClientSettingsPacket.java index f02b383ca..b139cac78 100644 --- a/src/main/java/net/minestom/server/network/packet/client/play/ClientSettingsPacket.java +++ b/src/main/java/net/minestom/server/network/packet/client/common/ClientSettingsPacket.java @@ -1,4 +1,4 @@ -package net.minestom.server.network.packet.client.play; +package net.minestom.server.network.packet.client.common; import net.minestom.server.entity.Player; import net.minestom.server.message.ChatMessageType; diff --git a/src/main/java/net/minestom/server/network/packet/client/configuration/ClientFinishConfigurationPacket.java b/src/main/java/net/minestom/server/network/packet/client/configuration/ClientFinishConfigurationPacket.java new file mode 100644 index 000000000..d500b844a --- /dev/null +++ b/src/main/java/net/minestom/server/network/packet/client/configuration/ClientFinishConfigurationPacket.java @@ -0,0 +1,17 @@ +package net.minestom.server.network.packet.client.configuration; + +import net.minestom.server.network.NetworkBuffer; +import net.minestom.server.network.packet.client.ClientPacket; +import org.jetbrains.annotations.NotNull; + +public record ClientFinishConfigurationPacket() implements ClientPacket { + + public ClientFinishConfigurationPacket(@NotNull NetworkBuffer buffer) { + this(); + } + + @Override + public void write(@NotNull NetworkBuffer writer) { + } + +} diff --git a/src/main/java/net/minestom/server/network/packet/client/handshake/ClientHandshakePacket.java b/src/main/java/net/minestom/server/network/packet/client/handshake/ClientHandshakePacket.java new file mode 100644 index 000000000..10ef72658 --- /dev/null +++ b/src/main/java/net/minestom/server/network/packet/client/handshake/ClientHandshakePacket.java @@ -0,0 +1,41 @@ +package net.minestom.server.network.packet.client.handshake; + +import net.minestom.server.extras.bungee.BungeeCordProxy; +import net.minestom.server.network.NetworkBuffer; +import net.minestom.server.network.packet.client.ClientPacket; +import org.jetbrains.annotations.NotNull; + +import static net.minestom.server.network.NetworkBuffer.*; + +public record ClientHandshakePacket(int protocolVersion, @NotNull String serverAddress, + int serverPort, int nextState) implements ClientPacket { + + public ClientHandshakePacket { + if (serverAddress.length() > getMaxHandshakeLength()) { + throw new IllegalArgumentException("Server address too long: " + serverAddress.length()); + } + } + + public ClientHandshakePacket(@NotNull NetworkBuffer reader) { + this(reader.read(VAR_INT), reader.read(STRING), + reader.read(UNSIGNED_SHORT), reader.read(VAR_INT)); + } + + @Override + public void write(@NotNull NetworkBuffer writer) { + writer.write(VAR_INT, protocolVersion); + int maxLength = getMaxHandshakeLength(); + if (serverAddress.length() > maxLength) { + throw new IllegalArgumentException("serverAddress is " + serverAddress.length() + " characters long, maximum allowed is " + maxLength); + } + writer.write(STRING, serverAddress); + writer.write(UNSIGNED_SHORT, serverPort); + writer.write(VAR_INT, nextState); + } + + private static int getMaxHandshakeLength() { + // BungeeGuard limits handshake length to 2500 characters, while vanilla limits it to 255 + return BungeeCordProxy.isEnabled() ? (BungeeCordProxy.isBungeeGuardEnabled() ? 2500 : Short.MAX_VALUE) : 255; + } + +} diff --git a/src/main/java/net/minestom/server/network/packet/client/login/ClientEncryptionResponsePacket.java b/src/main/java/net/minestom/server/network/packet/client/login/ClientEncryptionResponsePacket.java new file mode 100644 index 000000000..6b993541e --- /dev/null +++ b/src/main/java/net/minestom/server/network/packet/client/login/ClientEncryptionResponsePacket.java @@ -0,0 +1,21 @@ +package net.minestom.server.network.packet.client.login; + +import net.minestom.server.network.NetworkBuffer; +import net.minestom.server.network.packet.client.ClientPacket; +import org.jetbrains.annotations.NotNull; + +import static net.minestom.server.network.NetworkBuffer.BYTE_ARRAY; + +public record ClientEncryptionResponsePacket(byte[] sharedSecret, + byte[] encryptedVerifyToken) implements ClientPacket { + + public ClientEncryptionResponsePacket(@NotNull NetworkBuffer reader) { + this(reader.read(BYTE_ARRAY), reader.read(BYTE_ARRAY)); + } + + @Override + public void write(@NotNull NetworkBuffer writer) { + writer.write(BYTE_ARRAY, sharedSecret); + writer.write(BYTE_ARRAY, encryptedVerifyToken); + } +} diff --git a/src/main/java/net/minestom/server/network/packet/client/login/ClientLoginAcknowledgedPacket.java b/src/main/java/net/minestom/server/network/packet/client/login/ClientLoginAcknowledgedPacket.java new file mode 100644 index 000000000..cb6127cf6 --- /dev/null +++ b/src/main/java/net/minestom/server/network/packet/client/login/ClientLoginAcknowledgedPacket.java @@ -0,0 +1,17 @@ +package net.minestom.server.network.packet.client.login; + +import net.minestom.server.network.NetworkBuffer; +import net.minestom.server.network.packet.client.ClientPacket; +import org.jetbrains.annotations.NotNull; + +public record ClientLoginAcknowledgedPacket() implements ClientPacket { + + public ClientLoginAcknowledgedPacket(@NotNull NetworkBuffer buffer) { + this(); + } + + @Override + public void write(@NotNull NetworkBuffer writer) { + } + +} diff --git a/src/main/java/net/minestom/server/network/packet/client/login/ClientLoginPluginResponsePacket.java b/src/main/java/net/minestom/server/network/packet/client/login/ClientLoginPluginResponsePacket.java new file mode 100644 index 000000000..e3c74056a --- /dev/null +++ b/src/main/java/net/minestom/server/network/packet/client/login/ClientLoginPluginResponsePacket.java @@ -0,0 +1,22 @@ +package net.minestom.server.network.packet.client.login; + +import net.minestom.server.network.NetworkBuffer; +import net.minestom.server.network.packet.client.ClientPacket; +import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; + +import static net.minestom.server.network.NetworkBuffer.*; + +public record ClientLoginPluginResponsePacket(int messageId, byte @Nullable [] data) implements ClientPacket { + + public ClientLoginPluginResponsePacket(@NotNull NetworkBuffer reader) { + this(reader.read(VAR_INT), reader.readOptional(RAW_BYTES)); + } + + @Override + public void write(@NotNull NetworkBuffer writer) { + writer.write(VAR_INT, messageId); + writer.writeOptional(RAW_BYTES, data); + } + +} diff --git a/src/main/java/net/minestom/server/network/packet/client/login/ClientLoginStartPacket.java b/src/main/java/net/minestom/server/network/packet/client/login/ClientLoginStartPacket.java new file mode 100644 index 000000000..ddc9b6595 --- /dev/null +++ b/src/main/java/net/minestom/server/network/packet/client/login/ClientLoginStartPacket.java @@ -0,0 +1,27 @@ +package net.minestom.server.network.packet.client.login; + +import net.minestom.server.network.NetworkBuffer; +import net.minestom.server.network.packet.client.ClientPacket; +import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; + +import java.util.UUID; + +import static net.minestom.server.network.NetworkBuffer.STRING; +import static net.minestom.server.network.NetworkBuffer.UUID; + +public record ClientLoginStartPacket(@NotNull String username, + @NotNull UUID profileId) implements ClientPacket { + + public ClientLoginStartPacket(@NotNull NetworkBuffer reader) { + this(reader.read(STRING), reader.read(UUID)); + } + + @Override + public void write(@NotNull NetworkBuffer writer) { + if (username.length() > 16) + throw new IllegalArgumentException("Username is not allowed to be longer than 16 characters"); + writer.write(STRING, username); + writer.write(UUID, profileId); + } +} diff --git a/src/main/java/net/minestom/server/network/packet/client/login/EncryptionResponsePacket.java b/src/main/java/net/minestom/server/network/packet/client/login/EncryptionResponsePacket.java deleted file mode 100644 index f40790ffe..000000000 --- a/src/main/java/net/minestom/server/network/packet/client/login/EncryptionResponsePacket.java +++ /dev/null @@ -1,127 +0,0 @@ -package net.minestom.server.network.packet.client.login; - -import com.google.gson.Gson; -import com.google.gson.JsonElement; -import com.google.gson.JsonObject; -import net.kyori.adventure.text.Component; -import net.minestom.server.MinecraftServer; -import net.minestom.server.extras.MojangAuth; -import net.minestom.server.extras.mojangAuth.MojangCrypt; -import net.minestom.server.network.NetworkBuffer; -import net.minestom.server.network.packet.client.ClientPreplayPacket; -import net.minestom.server.network.player.GameProfile; -import net.minestom.server.network.player.PlayerConnection; -import net.minestom.server.network.player.PlayerSocketConnection; -import net.minestom.server.utils.async.AsyncUtils; -import org.jetbrains.annotations.NotNull; - -import javax.crypto.SecretKey; -import java.math.BigInteger; -import java.net.URI; -import java.net.URLEncoder; -import java.net.http.HttpClient; -import java.net.http.HttpRequest; -import java.net.http.HttpResponse; -import java.nio.charset.StandardCharsets; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.List; -import java.util.UUID; - -import static net.minestom.server.network.NetworkBuffer.BYTE_ARRAY; - -public record EncryptionResponsePacket(byte[] sharedSecret, - byte[] encryptedVerifyToken) implements ClientPreplayPacket { - private static final Gson GSON = new Gson(); - - public EncryptionResponsePacket(@NotNull NetworkBuffer reader) { - this(reader.read(BYTE_ARRAY), reader.read(BYTE_ARRAY)); - } - - @Override - public void process(@NotNull PlayerConnection connection) { - // Encryption is only support for socket connection - if (!(connection instanceof PlayerSocketConnection socketConnection)) return; - AsyncUtils.runAsync(() -> { - final String loginUsername = socketConnection.getLoginUsername(); - if (loginUsername == null || loginUsername.isEmpty()) { - // Shouldn't happen - return; - } - - final boolean hasPublicKey = connection.playerPublicKey() != null; - final boolean verificationFailed = hasPublicKey || !Arrays.equals(socketConnection.getNonce(), - MojangCrypt.decryptUsingKey(MojangAuth.getKeyPair().getPrivate(), encryptedVerifyToken)); - - if (verificationFailed) { - MinecraftServer.LOGGER.error("Encryption failed for {}", loginUsername); - return; - } - - final byte[] digestedData = MojangCrypt.digestData("", MojangAuth.getKeyPair().getPublic(), getSecretKey()); - if (digestedData == null) { - // Incorrect key, probably because of the client - MinecraftServer.LOGGER.error("Connection {} failed initializing encryption.", socketConnection.getRemoteAddress()); - connection.disconnect(); - return; - } - // Query Mojang's session server. - final String serverId = new BigInteger(digestedData).toString(16); - final String username = URLEncoder.encode(loginUsername, StandardCharsets.UTF_8); - - final String url = String.format(MojangAuth.AUTH_URL, username, serverId); - // TODO: Add ability to add ip query tag. See: https://wiki.vg/Protocol_Encryption#Authentication - - final HttpClient client = HttpClient.newHttpClient(); - final HttpRequest request = HttpRequest.newBuilder(URI.create(url)).GET().build(); - client.sendAsync(request, HttpResponse.BodyHandlers.ofString()).whenComplete((response, throwable) -> { - if (throwable != null) { - MinecraftServer.getExceptionManager().handleException(throwable); - if (socketConnection.getPlayer() != null) { - socketConnection.getPlayer().kick(Component.text("Failed to contact Mojang's Session Servers (Are they down?)")); - } else { - socketConnection.disconnect(); - } - return; - } - try { - final JsonObject gameProfile = GSON.fromJson(response.body(), JsonObject.class); - if (gameProfile == null) { - // Invalid response - if (socketConnection.getPlayer() != null) { - socketConnection.getPlayer().kick(Component.text("Failed to get data from Mojang's Session Servers (Are they down?)")); - } else { - socketConnection.disconnect(); - } - return; - } - socketConnection.setEncryptionKey(getSecretKey()); - UUID profileUUID = java.util.UUID.fromString(gameProfile.get("id").getAsString() - .replaceFirst("(\\w{8})(\\w{4})(\\w{4})(\\w{4})(\\w{12})", "$1-$2-$3-$4-$5")); - final String profileName = gameProfile.get("name").getAsString(); - - MinecraftServer.LOGGER.info("UUID of player {} is {}", loginUsername, profileUUID); - CONNECTION_MANAGER.startPlayState(connection, profileUUID, profileName, true); - List propertyList = new ArrayList<>(); - for (JsonElement element : gameProfile.get("properties").getAsJsonArray()) { - JsonObject object = element.getAsJsonObject(); - propertyList.add(new GameProfile.Property(object.get("name").getAsString(), object.get("value").getAsString(), object.get("signature").getAsString())); - } - socketConnection.UNSAFE_setProfile(new GameProfile(profileUUID, profileName, propertyList)); - } catch (Exception e) { - MinecraftServer.getExceptionManager().handleException(e); - } - }); - }); - } - - @Override - public void write(@NotNull NetworkBuffer writer) { - writer.write(BYTE_ARRAY, sharedSecret); - writer.write(BYTE_ARRAY, encryptedVerifyToken); - } - - private SecretKey getSecretKey() { - return MojangCrypt.decryptByteToSecretKey(MojangAuth.getKeyPair().getPrivate(), sharedSecret); - } -} diff --git a/src/main/java/net/minestom/server/network/packet/client/login/LoginPluginResponsePacket.java b/src/main/java/net/minestom/server/network/packet/client/login/LoginPluginResponsePacket.java deleted file mode 100644 index 2fc8fdef3..000000000 --- a/src/main/java/net/minestom/server/network/packet/client/login/LoginPluginResponsePacket.java +++ /dev/null @@ -1,82 +0,0 @@ -package net.minestom.server.network.packet.client.login; - -import net.kyori.adventure.text.Component; -import net.kyori.adventure.text.format.NamedTextColor; -import net.minestom.server.MinecraftServer; -import net.minestom.server.extras.velocity.VelocityProxy; -import net.minestom.server.network.ConnectionManager; -import net.minestom.server.network.NetworkBuffer; -import net.minestom.server.network.packet.client.ClientPreplayPacket; -import net.minestom.server.network.packet.server.login.LoginDisconnectPacket; -import net.minestom.server.network.player.GameProfile; -import net.minestom.server.network.player.PlayerConnection; -import net.minestom.server.network.player.PlayerSocketConnection; -import org.jetbrains.annotations.NotNull; -import org.jetbrains.annotations.Nullable; - -import java.net.InetAddress; -import java.net.InetSocketAddress; -import java.net.SocketAddress; -import java.net.UnknownHostException; -import java.nio.ByteBuffer; - -import static net.minestom.server.network.NetworkBuffer.*; - -public record LoginPluginResponsePacket(int messageId, byte @Nullable [] data) implements ClientPreplayPacket { - private final static ConnectionManager CONNECTION_MANAGER = MinecraftServer.getConnectionManager(); - public static final Component INVALID_PROXY_RESPONSE = Component.text("Invalid proxy response!", NamedTextColor.RED); - - public LoginPluginResponsePacket(@NotNull NetworkBuffer reader) { - this(reader.read(VAR_INT), reader.readOptional(RAW_BYTES)); - } - - @Override - public void process(@NotNull PlayerConnection connection) { - // Proxy support - if (connection instanceof PlayerSocketConnection socketConnection) { - final String channel = socketConnection.getPluginRequestChannel(messageId); - if (channel != null) { - boolean success = false; - - SocketAddress socketAddress = null; - GameProfile gameProfile = null; - - // Velocity - if (VelocityProxy.isEnabled() && channel.equals(VelocityProxy.PLAYER_INFO_CHANNEL)) { - if (data != null && data.length > 0) { - NetworkBuffer buffer = new NetworkBuffer(ByteBuffer.wrap(data)); - success = VelocityProxy.checkIntegrity(buffer); - if (success) { - // Get the real connection address - final InetAddress address; - try { - address = InetAddress.getByName(buffer.read(STRING)); - } catch (UnknownHostException e) { - MinecraftServer.getExceptionManager().handleException(e); - return; - } - final int port = ((java.net.InetSocketAddress) connection.getRemoteAddress()).getPort(); - socketAddress = new InetSocketAddress(address, port); - gameProfile = new GameProfile(buffer); - } - } - } - - if (success) { - socketConnection.setRemoteAddress(socketAddress); - socketConnection.UNSAFE_setProfile(gameProfile); - CONNECTION_MANAGER.startPlayState(connection, gameProfile.uuid(), gameProfile.name(), true); - } else { - LoginDisconnectPacket disconnectPacket = new LoginDisconnectPacket(INVALID_PROXY_RESPONSE); - socketConnection.sendPacket(disconnectPacket); - } - } - } - } - - @Override - public void write(@NotNull NetworkBuffer writer) { - writer.write(VAR_INT, messageId); - writer.writeOptional(RAW_BYTES, data); - } -} diff --git a/src/main/java/net/minestom/server/network/packet/client/login/LoginStartPacket.java b/src/main/java/net/minestom/server/network/packet/client/login/LoginStartPacket.java deleted file mode 100644 index 239b68367..000000000 --- a/src/main/java/net/minestom/server/network/packet/client/login/LoginStartPacket.java +++ /dev/null @@ -1,82 +0,0 @@ -package net.minestom.server.network.packet.client.login; - -import net.kyori.adventure.text.Component; -import net.kyori.adventure.text.format.NamedTextColor; -import net.minestom.server.extras.MojangAuth; -import net.minestom.server.extras.bungee.BungeeCordProxy; -import net.minestom.server.extras.velocity.VelocityProxy; -import net.minestom.server.network.ConnectionState; -import net.minestom.server.network.NetworkBuffer; -import net.minestom.server.network.packet.client.ClientPreplayPacket; -import net.minestom.server.network.packet.server.login.EncryptionRequestPacket; -import net.minestom.server.network.packet.server.login.LoginDisconnectPacket; -import net.minestom.server.network.packet.server.login.LoginPluginRequestPacket; -import net.minestom.server.network.player.PlayerConnection; -import net.minestom.server.network.player.PlayerSocketConnection; -import org.jetbrains.annotations.NotNull; -import org.jetbrains.annotations.Nullable; - -import java.util.UUID; -import java.util.concurrent.ThreadLocalRandom; - -import static net.minestom.server.network.NetworkBuffer.STRING; -import static net.minestom.server.network.NetworkBuffer.UUID; - -public record LoginStartPacket(@NotNull String username, - @Nullable UUID profileId) implements ClientPreplayPacket { - private static final Component ALREADY_CONNECTED = Component.text("You are already on this server", NamedTextColor.RED); - - public LoginStartPacket(@NotNull NetworkBuffer reader) { - this(reader.read(STRING), reader.readOptional(UUID)); - } - - @Override - public void process(@NotNull PlayerConnection connection) { - final boolean isSocketConnection = connection instanceof PlayerSocketConnection; - // Proxy support (only for socket clients) and cache the login username - if (isSocketConnection) { - PlayerSocketConnection socketConnection = (PlayerSocketConnection) connection; - socketConnection.UNSAFE_setLoginUsername(username); - // Velocity support - if (VelocityProxy.isEnabled()) { - final int messageId = ThreadLocalRandom.current().nextInt(); - final String channel = VelocityProxy.PLAYER_INFO_CHANNEL; - // Important in order to retrieve the channel in the response packet - socketConnection.addPluginRequestEntry(messageId, channel); - connection.sendPacket(new LoginPluginRequestPacket(messageId, channel, null)); - return; - } - } - - if (MojangAuth.isEnabled() && isSocketConnection) { - // Mojang auth - if (CONNECTION_MANAGER.getPlayer(username) != null) { - connection.sendPacket(new LoginDisconnectPacket(ALREADY_CONNECTED)); - connection.disconnect(); - return; - } - final PlayerSocketConnection socketConnection = (PlayerSocketConnection) connection; - socketConnection.setConnectionState(ConnectionState.LOGIN); - - final byte[] publicKey = MojangAuth.getKeyPair().getPublic().getEncoded(); - byte[] nonce = new byte[4]; - ThreadLocalRandom.current().nextBytes(nonce); - socketConnection.setNonce(nonce); - socketConnection.sendPacket(new EncryptionRequestPacket("", publicKey, nonce)); - } else { - final boolean bungee = BungeeCordProxy.isEnabled(); - // Offline - final UUID playerUuid = bungee && isSocketConnection ? - ((PlayerSocketConnection) connection).gameProfile().uuid() : - CONNECTION_MANAGER.getPlayerConnectionUuid(connection, username); - CONNECTION_MANAGER.startPlayState(connection, playerUuid, username, true); - } - } - - @Override - public void write(@NotNull NetworkBuffer writer) { - if (username.length() > 16) - throw new IllegalArgumentException("Username is not allowed to be longer than 16 characters"); - writer.write(STRING, username); - } -} diff --git a/src/main/java/net/minestom/server/network/packet/client/status/LegacyServerListPingPacket.java b/src/main/java/net/minestom/server/network/packet/client/status/LegacyServerListPingPacket.java index 9fc42ade7..8e3e31af1 100644 --- a/src/main/java/net/minestom/server/network/packet/client/status/LegacyServerListPingPacket.java +++ b/src/main/java/net/minestom/server/network/packet/client/status/LegacyServerListPingPacket.java @@ -1,22 +1,16 @@ package net.minestom.server.network.packet.client.status; import net.minestom.server.network.NetworkBuffer; -import net.minestom.server.network.packet.client.ClientPreplayPacket; -import net.minestom.server.network.player.PlayerConnection; +import net.minestom.server.network.packet.client.ClientPacket; import org.jetbrains.annotations.NotNull; import static net.minestom.server.network.NetworkBuffer.BYTE; -public record LegacyServerListPingPacket(byte payload) implements ClientPreplayPacket { +public record LegacyServerListPingPacket(byte payload) implements ClientPacket { public LegacyServerListPingPacket(@NotNull NetworkBuffer reader) { this(reader.read(BYTE)); } - @Override - public void process(@NotNull PlayerConnection connection) { - - } - @Override public void write(@NotNull NetworkBuffer writer) { writer.write(BYTE, payload); diff --git a/src/main/java/net/minestom/server/network/packet/client/status/PingPacket.java b/src/main/java/net/minestom/server/network/packet/client/status/PingPacket.java index 56c11029c..c84b62850 100644 --- a/src/main/java/net/minestom/server/network/packet/client/status/PingPacket.java +++ b/src/main/java/net/minestom/server/network/packet/client/status/PingPacket.java @@ -1,41 +1,16 @@ package net.minestom.server.network.packet.client.status; -import net.minestom.server.MinecraftServer; -import net.minestom.server.event.EventDispatcher; -import net.minestom.server.event.server.ClientPingServerEvent; import net.minestom.server.network.NetworkBuffer; -import net.minestom.server.network.packet.client.ClientPreplayPacket; -import net.minestom.server.network.packet.server.status.PongPacket; -import net.minestom.server.network.player.PlayerConnection; +import net.minestom.server.network.packet.client.ClientPacket; import org.jetbrains.annotations.NotNull; import static net.minestom.server.network.NetworkBuffer.LONG; -public record PingPacket(long number) implements ClientPreplayPacket { +public record PingPacket(long number) implements ClientPacket { public PingPacket(@NotNull NetworkBuffer reader) { this(reader.read(LONG)); } - @Override - public void process(@NotNull PlayerConnection connection) { - final ClientPingServerEvent clientPingEvent = new ClientPingServerEvent(connection, number); - EventDispatcher.call(clientPingEvent); - - if (clientPingEvent.isCancelled()) { - connection.disconnect(); - } else { - if (clientPingEvent.getDelay().isZero()) { - connection.sendPacket(new PongPacket(clientPingEvent.getPayload())); - connection.disconnect(); - } else { - MinecraftServer.getSchedulerManager().buildTask(() -> { - connection.sendPacket(new PongPacket(clientPingEvent.getPayload())); - connection.disconnect(); - }).delay(clientPingEvent.getDelay()).schedule(); - } - } - } - @Override public void write(@NotNull NetworkBuffer writer) { writer.write(LONG, number); diff --git a/src/main/java/net/minestom/server/network/packet/client/status/StatusRequestPacket.java b/src/main/java/net/minestom/server/network/packet/client/status/StatusRequestPacket.java index e24411a9a..72fcb2a51 100644 --- a/src/main/java/net/minestom/server/network/packet/client/status/StatusRequestPacket.java +++ b/src/main/java/net/minestom/server/network/packet/client/status/StatusRequestPacket.java @@ -1,27 +1,14 @@ package net.minestom.server.network.packet.client.status; -import net.minestom.server.event.EventDispatcher; -import net.minestom.server.event.server.ServerListPingEvent; import net.minestom.server.network.NetworkBuffer; -import net.minestom.server.network.packet.client.ClientPreplayPacket; -import net.minestom.server.network.packet.server.handshake.ResponsePacket; -import net.minestom.server.network.player.PlayerConnection; -import net.minestom.server.ping.ServerListPingType; +import net.minestom.server.network.packet.client.ClientPacket; import org.jetbrains.annotations.NotNull; -public record StatusRequestPacket() implements ClientPreplayPacket { +public record StatusRequestPacket() implements ClientPacket { public StatusRequestPacket(@NotNull NetworkBuffer reader) { this(); } - @Override - public void process(@NotNull PlayerConnection connection) { - final ServerListPingType pingVersion = ServerListPingType.fromModernProtocolVersion(connection.getProtocolVersion()); - final ServerListPingEvent statusRequestEvent = new ServerListPingEvent(connection, pingVersion); - EventDispatcher.callCancellable(statusRequestEvent, () -> - connection.sendPacket(new ResponsePacket(pingVersion.getPingResponse(statusRequestEvent.getResponseData())))); - } - @Override public void write(@NotNull NetworkBuffer writer) { // Empty diff --git a/src/main/java/net/minestom/server/network/packet/server/CachedPacket.java b/src/main/java/net/minestom/server/network/packet/server/CachedPacket.java index b18905a42..9138e1684 100644 --- a/src/main/java/net/minestom/server/network/packet/server/CachedPacket.java +++ b/src/main/java/net/minestom/server/network/packet/server/CachedPacket.java @@ -1,5 +1,6 @@ package net.minestom.server.network.packet.server; +import net.minestom.server.network.ConnectionState; import net.minestom.server.utils.PacketUtils; import org.jetbrains.annotations.ApiStatus; import org.jetbrains.annotations.NotNull; @@ -33,23 +34,23 @@ public final class CachedPacket implements SendablePacket { this.packet = null; } - public @NotNull ServerPacket packet() { - FramedPacket cache = updatedCache(); + public @NotNull ServerPacket packet(@NotNull ConnectionState state) { + FramedPacket cache = updatedCache(state); return cache != null ? cache.packet() : packetSupplier.get(); } - public @Nullable ByteBuffer body() { - FramedPacket cache = updatedCache(); + public @Nullable ByteBuffer body(@NotNull ConnectionState state) { + FramedPacket cache = updatedCache(state); return cache != null ? cache.body() : null; } - private @Nullable FramedPacket updatedCache() { + private @Nullable FramedPacket updatedCache(@NotNull ConnectionState state) { if (!PacketUtils.CACHED_PACKET) return null; SoftReference ref = packet; FramedPacket cache; if (ref == null || (cache = ref.get()) == null) { - cache = PacketUtils.allocateTrimmedPacket(packetSupplier.get()); + cache = PacketUtils.allocateTrimmedPacket(state, packetSupplier.get()); this.packet = new SoftReference<>(cache); } return cache; diff --git a/src/main/java/net/minestom/server/network/packet/server/SendablePacket.java b/src/main/java/net/minestom/server/network/packet/server/SendablePacket.java index f69d01f11..aa65b7e3d 100644 --- a/src/main/java/net/minestom/server/network/packet/server/SendablePacket.java +++ b/src/main/java/net/minestom/server/network/packet/server/SendablePacket.java @@ -1,5 +1,6 @@ package net.minestom.server.network.packet.server; +import net.minestom.server.network.ConnectionState; import net.minestom.server.network.player.PlayerConnection; import org.jetbrains.annotations.ApiStatus; import org.jetbrains.annotations.NotNull; @@ -12,11 +13,11 @@ public sealed interface SendablePacket permits CachedPacket, FramedPacket, LazyPacket, ServerPacket { @ApiStatus.Experimental - static @NotNull ServerPacket extractServerPacket(@NotNull SendablePacket packet) { + static @NotNull ServerPacket extractServerPacket(@NotNull ConnectionState state, @NotNull SendablePacket packet) { if (packet instanceof ServerPacket serverPacket) { return serverPacket; } else if (packet instanceof CachedPacket cachedPacket) { - return cachedPacket.packet(); + return cachedPacket.packet(state); } else if (packet instanceof FramedPacket framedPacket) { return framedPacket.packet(); } else if (packet instanceof LazyPacket lazyPacket) { diff --git a/src/main/java/net/minestom/server/network/packet/server/ServerPacket.java b/src/main/java/net/minestom/server/network/packet/server/ServerPacket.java index f82edb800..fc256b33f 100644 --- a/src/main/java/net/minestom/server/network/packet/server/ServerPacket.java +++ b/src/main/java/net/minestom/server/network/packet/server/ServerPacket.java @@ -1,7 +1,9 @@ package net.minestom.server.network.packet.server; +import net.minestom.server.network.ConnectionState; import net.minestom.server.network.NetworkBuffer; import net.minestom.server.network.player.PlayerConnection; +import org.jetbrains.annotations.NotNull; /** * Represents a packet which can be sent to a player using {@link PlayerConnection#sendPacket(SendablePacket)}. @@ -17,5 +19,6 @@ public non-sealed interface ServerPacket extends NetworkBuffer.Writer, SendableP * * @return the id of this packet */ - int getId(); + int getId(@NotNull ConnectionState state); + } diff --git a/src/main/java/net/minestom/server/network/packet/server/ServerPacketIdentifier.java b/src/main/java/net/minestom/server/network/packet/server/ServerPacketIdentifier.java index 46e5145c0..42cae405b 100644 --- a/src/main/java/net/minestom/server/network/packet/server/ServerPacketIdentifier.java +++ b/src/main/java/net/minestom/server/network/packet/server/ServerPacketIdentifier.java @@ -11,6 +11,16 @@ public final class ServerPacketIdentifier { public static final int LOGIN_SET_COMPRESSION = 0x03; public static final int LOGIN_PLUGIN_REQUEST = 0x04; + public static final int CONFIGURATION_PLUGIN_MESSAGE = 0x00; + public static final int CONFIGURATION_DISCONNECT = 0x01; + public static final int CONFIGURATION_FINISH_CONFIGURATION = 0x02; + public static final int CONFIGURATION_KEEP_ALIVE = 0x03; + public static final int CONFIGURATION_PING = 0x04; + public static final int CONFIGURATION_REGISTRY_DATA = 0x05; + public static final int CONFIGURATION_RESOURCE_PACK_SEND = 0x06; + public static final int CONFIGURATION_UPDATE_ENABLED_FEATURES = 0x07; + public static final int CONFIGURATION_TAGS = 0x08; + public static final int BUNDLE = nextPlayId(); public static final int SPAWN_ENTITY = nextPlayId(); public static final int SPAWN_EXPERIENCE_ORB = nextPlayId(); @@ -24,6 +34,8 @@ public final class ServerPacketIdentifier { public static final int BLOCK_CHANGE = nextPlayId(); public static final int BOSS_BAR = nextPlayId(); public static final int SERVER_DIFFICULTY = nextPlayId(); + public static final int CHUNK_BATCH_FINISHED = nextPlayId(); + public static final int CHUNK_BATCH_START = nextPlayId(); public static final int CHUNK_BIOMES = nextPlayId(); public static final int CLEAR_TITLES = nextPlayId(); public static final int TAB_COMPLETE = nextPlayId(); @@ -62,6 +74,7 @@ public final class ServerPacketIdentifier { public static final int OPEN_WINDOW = nextPlayId(); public static final int OPEN_SIGN_EDITOR = nextPlayId(); public static final int PING = nextPlayId(); + public static final int PONG_RESPONSE = nextPlayId(); public static final int CRAFT_RECIPE_RESPONSE = nextPlayId(); public static final int PLAYER_ABILITIES = nextPlayId(); public static final int PLAYER_CHAT = nextPlayId(); @@ -110,6 +123,7 @@ public final class ServerPacketIdentifier { public static final int SET_TITLE_TIME = nextPlayId(); public static final int ENTITY_SOUND_EFFECT = nextPlayId(); public static final int SOUND_EFFECT = nextPlayId(); + public static final int START_CONFIGURATION_PACKET = nextPlayId(); public static final int STOP_SOUND = nextPlayId(); public static final int SYSTEM_CHAT = nextPlayId(); public static final int PLAYER_LIST_HEADER_AND_FOOTER = nextPlayId(); @@ -118,7 +132,6 @@ public final class ServerPacketIdentifier { public static final int ENTITY_TELEPORT = nextPlayId(); public static final int ADVANCEMENTS = nextPlayId(); public static final int ENTITY_PROPERTIES = nextPlayId(); - public static final int UPDATE_ENABLED_FEATURES = nextPlayId(); public static final int ENTITY_EFFECT = nextPlayId(); public static final int DECLARE_RECIPES = nextPlayId(); public static final int TAGS = nextPlayId(); diff --git a/src/main/java/net/minestom/server/network/packet/server/play/DisconnectPacket.java b/src/main/java/net/minestom/server/network/packet/server/common/DisconnectPacket.java similarity index 79% rename from src/main/java/net/minestom/server/network/packet/server/play/DisconnectPacket.java rename to src/main/java/net/minestom/server/network/packet/server/common/DisconnectPacket.java index 036112abb..a5cbcf765 100644 --- a/src/main/java/net/minestom/server/network/packet/server/play/DisconnectPacket.java +++ b/src/main/java/net/minestom/server/network/packet/server/common/DisconnectPacket.java @@ -1,6 +1,7 @@ -package net.minestom.server.network.packet.server.play; +package net.minestom.server.network.packet.server.common; import net.kyori.adventure.text.Component; +import net.minestom.server.network.ConnectionState; import net.minestom.server.network.NetworkBuffer; import net.minestom.server.network.packet.server.ComponentHoldingServerPacket; import net.minestom.server.network.packet.server.ServerPacket; @@ -24,8 +25,8 @@ public record DisconnectPacket(@NotNull Component message) implements ComponentH } @Override - public int getId() { - return ServerPacketIdentifier.DISCONNECT; + public int getId(@NotNull ConnectionState state) { + return state == ConnectionState.PLAY ? ServerPacketIdentifier.DISCONNECT : ServerPacketIdentifier.CONFIGURATION_DISCONNECT; } @Override diff --git a/src/main/java/net/minestom/server/network/packet/server/play/KeepAlivePacket.java b/src/main/java/net/minestom/server/network/packet/server/common/KeepAlivePacket.java similarity index 66% rename from src/main/java/net/minestom/server/network/packet/server/play/KeepAlivePacket.java rename to src/main/java/net/minestom/server/network/packet/server/common/KeepAlivePacket.java index 7fc79fd26..2f65d3b0b 100644 --- a/src/main/java/net/minestom/server/network/packet/server/play/KeepAlivePacket.java +++ b/src/main/java/net/minestom/server/network/packet/server/common/KeepAlivePacket.java @@ -1,5 +1,6 @@ -package net.minestom.server.network.packet.server.play; +package net.minestom.server.network.packet.server.common; +import net.minestom.server.network.ConnectionState; import net.minestom.server.network.NetworkBuffer; import net.minestom.server.network.packet.server.ServerPacket; import net.minestom.server.network.packet.server.ServerPacketIdentifier; @@ -18,7 +19,7 @@ public record KeepAlivePacket(long id) implements ServerPacket { } @Override - public int getId() { - return ServerPacketIdentifier.KEEP_ALIVE; + public int getId(@NotNull ConnectionState state) { + return state == ConnectionState.PLAY ? ServerPacketIdentifier.KEEP_ALIVE : ServerPacketIdentifier.CONFIGURATION_KEEP_ALIVE; } } diff --git a/src/main/java/net/minestom/server/network/packet/server/play/PingPacket.java b/src/main/java/net/minestom/server/network/packet/server/common/PingPacket.java similarity index 66% rename from src/main/java/net/minestom/server/network/packet/server/play/PingPacket.java rename to src/main/java/net/minestom/server/network/packet/server/common/PingPacket.java index 6f2e18ec9..311a648cc 100644 --- a/src/main/java/net/minestom/server/network/packet/server/play/PingPacket.java +++ b/src/main/java/net/minestom/server/network/packet/server/common/PingPacket.java @@ -1,5 +1,6 @@ -package net.minestom.server.network.packet.server.play; +package net.minestom.server.network.packet.server.common; +import net.minestom.server.network.ConnectionState; import net.minestom.server.network.NetworkBuffer; import net.minestom.server.network.packet.server.ServerPacket; import net.minestom.server.network.packet.server.ServerPacketIdentifier; @@ -18,7 +19,7 @@ public record PingPacket(int id) implements ServerPacket { } @Override - public int getId() { - return ServerPacketIdentifier.PING; + public int getId(@NotNull ConnectionState state) { + return state == ConnectionState.PLAY ? ServerPacketIdentifier.PING : ServerPacketIdentifier.CONFIGURATION_PING; } } diff --git a/src/main/java/net/minestom/server/network/packet/server/play/PluginMessagePacket.java b/src/main/java/net/minestom/server/network/packet/server/common/PluginMessagePacket.java similarity index 80% rename from src/main/java/net/minestom/server/network/packet/server/play/PluginMessagePacket.java rename to src/main/java/net/minestom/server/network/packet/server/common/PluginMessagePacket.java index 880029156..dc1179074 100644 --- a/src/main/java/net/minestom/server/network/packet/server/play/PluginMessagePacket.java +++ b/src/main/java/net/minestom/server/network/packet/server/common/PluginMessagePacket.java @@ -1,6 +1,7 @@ -package net.minestom.server.network.packet.server.play; +package net.minestom.server.network.packet.server.common; import net.minestom.server.MinecraftServer; +import net.minestom.server.network.ConnectionState; import net.minestom.server.network.NetworkBuffer; import net.minestom.server.network.packet.server.ServerPacket; import net.minestom.server.network.packet.server.ServerPacketIdentifier; @@ -21,8 +22,8 @@ public record PluginMessagePacket(String channel, byte[] data) implements Server } @Override - public int getId() { - return ServerPacketIdentifier.PLUGIN_MESSAGE; + public int getId(@NotNull ConnectionState state) { + return state == ConnectionState.PLAY ? ServerPacketIdentifier.PLUGIN_MESSAGE : ServerPacketIdentifier.CONFIGURATION_PLUGIN_MESSAGE; } /** diff --git a/src/main/java/net/minestom/server/network/packet/server/play/ResourcePackSendPacket.java b/src/main/java/net/minestom/server/network/packet/server/common/ResourcePackSendPacket.java similarity index 85% rename from src/main/java/net/minestom/server/network/packet/server/play/ResourcePackSendPacket.java rename to src/main/java/net/minestom/server/network/packet/server/common/ResourcePackSendPacket.java index a2ea7dae5..b18775281 100644 --- a/src/main/java/net/minestom/server/network/packet/server/play/ResourcePackSendPacket.java +++ b/src/main/java/net/minestom/server/network/packet/server/common/ResourcePackSendPacket.java @@ -1,6 +1,7 @@ -package net.minestom.server.network.packet.server.play; +package net.minestom.server.network.packet.server.common; import net.kyori.adventure.text.Component; +import net.minestom.server.network.ConnectionState; import net.minestom.server.network.NetworkBuffer; import net.minestom.server.network.packet.server.ComponentHoldingServerPacket; import net.minestom.server.network.packet.server.ServerPacket; @@ -40,8 +41,8 @@ public record ResourcePackSendPacket(String url, String hash, boolean forced, } @Override - public int getId() { - return ServerPacketIdentifier.RESOURCE_PACK_SEND; + public int getId(@NotNull ConnectionState state) { + return state == ConnectionState.PLAY ? ServerPacketIdentifier.RESOURCE_PACK_SEND : ServerPacketIdentifier.CONFIGURATION_RESOURCE_PACK_SEND; } @Override diff --git a/src/main/java/net/minestom/server/network/packet/server/play/TagsPacket.java b/src/main/java/net/minestom/server/network/packet/server/common/TagsPacket.java similarity index 90% rename from src/main/java/net/minestom/server/network/packet/server/play/TagsPacket.java rename to src/main/java/net/minestom/server/network/packet/server/common/TagsPacket.java index 39a970c3a..43d00052f 100644 --- a/src/main/java/net/minestom/server/network/packet/server/play/TagsPacket.java +++ b/src/main/java/net/minestom/server/network/packet/server/common/TagsPacket.java @@ -1,7 +1,8 @@ -package net.minestom.server.network.packet.server.play; +package net.minestom.server.network.packet.server.common; import net.minestom.server.MinecraftServer; import net.minestom.server.gamedata.tags.Tag; +import net.minestom.server.network.ConnectionState; import net.minestom.server.network.NetworkBuffer; import net.minestom.server.network.packet.server.CachedPacket; import net.minestom.server.network.packet.server.ServerPacket; @@ -47,8 +48,8 @@ public record TagsPacket(@NotNull Map> tagsMap) impleme } @Override - public int getId() { - return ServerPacketIdentifier.TAGS; + public int getId(@NotNull ConnectionState state) { + return state == ConnectionState.PLAY ? ServerPacketIdentifier.TAGS : ServerPacketIdentifier.CONFIGURATION_TAGS; } private static Map> readTagsMap(@NotNull NetworkBuffer reader) { diff --git a/src/main/java/net/minestom/server/network/packet/server/configuration/FinishConfigurationPacket.java b/src/main/java/net/minestom/server/network/packet/server/configuration/FinishConfigurationPacket.java new file mode 100644 index 000000000..18d319731 --- /dev/null +++ b/src/main/java/net/minestom/server/network/packet/server/configuration/FinishConfigurationPacket.java @@ -0,0 +1,22 @@ +package net.minestom.server.network.packet.server.configuration; + +import net.minestom.server.network.ConnectionState; +import net.minestom.server.network.NetworkBuffer; +import net.minestom.server.network.packet.server.ServerPacket; +import org.jetbrains.annotations.NotNull; + +public record FinishConfigurationPacket() implements ServerPacket { + + public FinishConfigurationPacket(@NotNull NetworkBuffer buffer) { + this(); + } + + @Override + public void write(@NotNull NetworkBuffer writer) { + } + + @Override + public int getId(@NotNull ConnectionState state) { + return 2; + } +} diff --git a/src/main/java/net/minestom/server/network/packet/server/login/EncryptionRequestPacket.java b/src/main/java/net/minestom/server/network/packet/server/login/EncryptionRequestPacket.java index 119195f79..26aa5822b 100644 --- a/src/main/java/net/minestom/server/network/packet/server/login/EncryptionRequestPacket.java +++ b/src/main/java/net/minestom/server/network/packet/server/login/EncryptionRequestPacket.java @@ -1,5 +1,6 @@ package net.minestom.server.network.packet.server.login; +import net.minestom.server.network.ConnectionState; import net.minestom.server.network.NetworkBuffer; import net.minestom.server.network.packet.server.ServerPacket; import net.minestom.server.network.packet.server.ServerPacketIdentifier; @@ -25,7 +26,7 @@ public record EncryptionRequestPacket(@NotNull String serverId, } @Override - public int getId() { + public int getId(@NotNull ConnectionState state) { return ServerPacketIdentifier.LOGIN_ENCRYPTION_REQUEST; } } diff --git a/src/main/java/net/minestom/server/network/packet/server/login/LoginDisconnectPacket.java b/src/main/java/net/minestom/server/network/packet/server/login/LoginDisconnectPacket.java index a9a5e5772..c45591eda 100644 --- a/src/main/java/net/minestom/server/network/packet/server/login/LoginDisconnectPacket.java +++ b/src/main/java/net/minestom/server/network/packet/server/login/LoginDisconnectPacket.java @@ -1,6 +1,7 @@ package net.minestom.server.network.packet.server.login; import net.kyori.adventure.text.Component; +import net.minestom.server.network.ConnectionState; import net.minestom.server.network.NetworkBuffer; import net.minestom.server.network.packet.server.ComponentHoldingServerPacket; import net.minestom.server.network.packet.server.ServerPacketIdentifier; @@ -23,7 +24,7 @@ public record LoginDisconnectPacket(@NotNull Component kickMessage) implements C } @Override - public int getId() { + public int getId(@NotNull ConnectionState state) { return ServerPacketIdentifier.LOGIN_DISCONNECT; } diff --git a/src/main/java/net/minestom/server/network/packet/server/login/LoginPluginRequestPacket.java b/src/main/java/net/minestom/server/network/packet/server/login/LoginPluginRequestPacket.java index f6cf0fa27..88ac38d3c 100644 --- a/src/main/java/net/minestom/server/network/packet/server/login/LoginPluginRequestPacket.java +++ b/src/main/java/net/minestom/server/network/packet/server/login/LoginPluginRequestPacket.java @@ -1,5 +1,6 @@ package net.minestom.server.network.packet.server.login; +import net.minestom.server.network.ConnectionState; import net.minestom.server.network.NetworkBuffer; import net.minestom.server.network.packet.server.ServerPacket; import net.minestom.server.network.packet.server.ServerPacketIdentifier; @@ -25,7 +26,7 @@ public record LoginPluginRequestPacket(int messageId, @NotNull String channel, } @Override - public int getId() { + public int getId(@NotNull ConnectionState state) { return ServerPacketIdentifier.LOGIN_PLUGIN_REQUEST; } } diff --git a/src/main/java/net/minestom/server/network/packet/server/login/LoginSuccessPacket.java b/src/main/java/net/minestom/server/network/packet/server/login/LoginSuccessPacket.java index 3de0135d7..766f5ae6a 100644 --- a/src/main/java/net/minestom/server/network/packet/server/login/LoginSuccessPacket.java +++ b/src/main/java/net/minestom/server/network/packet/server/login/LoginSuccessPacket.java @@ -1,5 +1,6 @@ package net.minestom.server.network.packet.server.login; +import net.minestom.server.network.ConnectionState; import net.minestom.server.network.NetworkBuffer; import net.minestom.server.network.packet.server.ServerPacket; import net.minestom.server.network.packet.server.ServerPacketIdentifier; @@ -23,7 +24,7 @@ public record LoginSuccessPacket(@NotNull UUID uuid, @NotNull String username, i } @Override - public int getId() { + public int getId(@NotNull ConnectionState state) { return ServerPacketIdentifier.LOGIN_SUCCESS; } } diff --git a/src/main/java/net/minestom/server/network/packet/server/login/SetCompressionPacket.java b/src/main/java/net/minestom/server/network/packet/server/login/SetCompressionPacket.java index f5a890e80..0f1dcd370 100644 --- a/src/main/java/net/minestom/server/network/packet/server/login/SetCompressionPacket.java +++ b/src/main/java/net/minestom/server/network/packet/server/login/SetCompressionPacket.java @@ -1,5 +1,6 @@ package net.minestom.server.network.packet.server.login; +import net.minestom.server.network.ConnectionState; import net.minestom.server.network.NetworkBuffer; import net.minestom.server.network.packet.server.ServerPacket; import net.minestom.server.network.packet.server.ServerPacketIdentifier; @@ -18,7 +19,7 @@ public record SetCompressionPacket(int threshold) implements ServerPacket { } @Override - public int getId() { + public int getId(@NotNull ConnectionState state) { return ServerPacketIdentifier.LOGIN_SET_COMPRESSION; } } diff --git a/src/main/java/net/minestom/server/network/packet/server/play/AcknowledgeBlockChangePacket.java b/src/main/java/net/minestom/server/network/packet/server/play/AcknowledgeBlockChangePacket.java index 3a5fd6ce8..55c04c5d8 100644 --- a/src/main/java/net/minestom/server/network/packet/server/play/AcknowledgeBlockChangePacket.java +++ b/src/main/java/net/minestom/server/network/packet/server/play/AcknowledgeBlockChangePacket.java @@ -1,5 +1,6 @@ package net.minestom.server.network.packet.server.play; +import net.minestom.server.network.ConnectionState; import net.minestom.server.network.NetworkBuffer; import net.minestom.server.network.packet.server.ServerPacket; import net.minestom.server.network.packet.server.ServerPacketIdentifier; @@ -18,7 +19,7 @@ public record AcknowledgeBlockChangePacket(int sequence) implements ServerPacket } @Override - public int getId() { + public int getId(@NotNull ConnectionState state) { return ServerPacketIdentifier.ACKNOWLEDGE_BLOCK_CHANGE; } } diff --git a/src/main/java/net/minestom/server/network/packet/server/play/ActionBarPacket.java b/src/main/java/net/minestom/server/network/packet/server/play/ActionBarPacket.java index 353ac2869..87155f60e 100644 --- a/src/main/java/net/minestom/server/network/packet/server/play/ActionBarPacket.java +++ b/src/main/java/net/minestom/server/network/packet/server/play/ActionBarPacket.java @@ -1,6 +1,7 @@ package net.minestom.server.network.packet.server.play; import net.kyori.adventure.text.Component; +import net.minestom.server.network.ConnectionState; import net.minestom.server.network.NetworkBuffer; import net.minestom.server.network.packet.server.ComponentHoldingServerPacket; import net.minestom.server.network.packet.server.ServerPacket; @@ -24,7 +25,7 @@ public record ActionBarPacket(@NotNull Component text) implements ComponentHoldi } @Override - public int getId() { + public int getId(@NotNull ConnectionState state) { return ServerPacketIdentifier.ACTION_BAR; } diff --git a/src/main/java/net/minestom/server/network/packet/server/play/AdvancementsPacket.java b/src/main/java/net/minestom/server/network/packet/server/play/AdvancementsPacket.java index 9166ca97e..485c0f29f 100644 --- a/src/main/java/net/minestom/server/network/packet/server/play/AdvancementsPacket.java +++ b/src/main/java/net/minestom/server/network/packet/server/play/AdvancementsPacket.java @@ -4,6 +4,7 @@ import net.kyori.adventure.text.Component; import net.minestom.server.advancements.FrameType; import net.minestom.server.adventure.ComponentHolder; import net.minestom.server.item.ItemStack; +import net.minestom.server.network.ConnectionState; import net.minestom.server.network.NetworkBuffer; import net.minestom.server.network.packet.server.ComponentHoldingServerPacket; import net.minestom.server.network.packet.server.ServerPacket; @@ -43,7 +44,7 @@ public record AdvancementsPacket(boolean reset, @NotNull List nodes, } @Override - public int getId() { + public int getId(@NotNull ConnectionState state) { return ServerPacketIdentifier.DECLARE_COMMANDS; } diff --git a/src/main/java/net/minestom/server/network/packet/server/play/DeclareRecipesPacket.java b/src/main/java/net/minestom/server/network/packet/server/play/DeclareRecipesPacket.java index 5333a844f..1d53df24f 100644 --- a/src/main/java/net/minestom/server/network/packet/server/play/DeclareRecipesPacket.java +++ b/src/main/java/net/minestom/server/network/packet/server/play/DeclareRecipesPacket.java @@ -1,6 +1,7 @@ package net.minestom.server.network.packet.server.play; import net.minestom.server.item.ItemStack; +import net.minestom.server.network.ConnectionState; import net.minestom.server.network.NetworkBuffer; import net.minestom.server.network.packet.server.ServerPacket; import net.minestom.server.network.packet.server.ServerPacketIdentifier; @@ -46,7 +47,7 @@ public record DeclareRecipesPacket(@NotNull List recipes) implem } @Override - public int getId() { + public int getId(@NotNull ConnectionState state) { return ServerPacketIdentifier.DECLARE_RECIPES; } diff --git a/src/main/java/net/minestom/server/network/packet/server/play/DeleteChatPacket.java b/src/main/java/net/minestom/server/network/packet/server/play/DeleteChatPacket.java index a277ad89e..46912b3f6 100644 --- a/src/main/java/net/minestom/server/network/packet/server/play/DeleteChatPacket.java +++ b/src/main/java/net/minestom/server/network/packet/server/play/DeleteChatPacket.java @@ -1,6 +1,7 @@ package net.minestom.server.network.packet.server.play; import net.minestom.server.crypto.MessageSignature; +import net.minestom.server.network.ConnectionState; import net.minestom.server.network.NetworkBuffer; import net.minestom.server.network.packet.server.ServerPacket; import net.minestom.server.network.packet.server.ServerPacketIdentifier; @@ -17,7 +18,7 @@ public record DeleteChatPacket(@NotNull MessageSignature signature) implements S } @Override - public int getId() { + public int getId(@NotNull ConnectionState state) { return ServerPacketIdentifier.DELETE_CHAT_MESSAGE; } } diff --git a/src/main/java/net/minestom/server/network/packet/server/play/DestroyEntitiesPacket.java b/src/main/java/net/minestom/server/network/packet/server/play/DestroyEntitiesPacket.java index 8c0a4062e..dd0d7441d 100644 --- a/src/main/java/net/minestom/server/network/packet/server/play/DestroyEntitiesPacket.java +++ b/src/main/java/net/minestom/server/network/packet/server/play/DestroyEntitiesPacket.java @@ -1,5 +1,6 @@ package net.minestom.server.network.packet.server.play; +import net.minestom.server.network.ConnectionState; import net.minestom.server.network.NetworkBuffer; import net.minestom.server.network.packet.server.ServerPacket; import net.minestom.server.network.packet.server.ServerPacketIdentifier; @@ -28,7 +29,7 @@ public record DestroyEntitiesPacket(@NotNull List entityIds) implements } @Override - public int getId() { + public int getId(@NotNull ConnectionState state) { return ServerPacketIdentifier.DESTROY_ENTITIES; } } diff --git a/src/main/java/net/minestom/server/network/packet/server/play/DisplayScoreboardPacket.java b/src/main/java/net/minestom/server/network/packet/server/play/DisplayScoreboardPacket.java index db83202da..144d3ee2a 100644 --- a/src/main/java/net/minestom/server/network/packet/server/play/DisplayScoreboardPacket.java +++ b/src/main/java/net/minestom/server/network/packet/server/play/DisplayScoreboardPacket.java @@ -1,5 +1,6 @@ package net.minestom.server.network.packet.server.play; +import net.minestom.server.network.ConnectionState; import net.minestom.server.network.NetworkBuffer; import net.minestom.server.network.packet.server.ServerPacket; import net.minestom.server.network.packet.server.ServerPacketIdentifier; @@ -20,7 +21,7 @@ public record DisplayScoreboardPacket(byte position, String scoreName) implement } @Override - public int getId() { + public int getId(@NotNull ConnectionState state) { return ServerPacketIdentifier.DISPLAY_SCOREBOARD; } } diff --git a/src/main/java/net/minestom/server/network/packet/server/play/EffectPacket.java b/src/main/java/net/minestom/server/network/packet/server/play/EffectPacket.java index bf5fb4f29..4670289ea 100644 --- a/src/main/java/net/minestom/server/network/packet/server/play/EffectPacket.java +++ b/src/main/java/net/minestom/server/network/packet/server/play/EffectPacket.java @@ -1,6 +1,7 @@ package net.minestom.server.network.packet.server.play; import net.minestom.server.coordinate.Point; +import net.minestom.server.network.ConnectionState; import net.minestom.server.network.NetworkBuffer; import net.minestom.server.network.packet.server.ServerPacket; import net.minestom.server.network.packet.server.ServerPacketIdentifier; @@ -23,7 +24,7 @@ public record EffectPacket(int effectId, Point position, int data, } @Override - public int getId() { + public int getId(@NotNull ConnectionState state) { return ServerPacketIdentifier.EFFECT; } } diff --git a/src/main/java/net/minestom/server/network/packet/server/play/EndCombatEventPacket.java b/src/main/java/net/minestom/server/network/packet/server/play/EndCombatEventPacket.java index ade695396..fadbefb4d 100644 --- a/src/main/java/net/minestom/server/network/packet/server/play/EndCombatEventPacket.java +++ b/src/main/java/net/minestom/server/network/packet/server/play/EndCombatEventPacket.java @@ -1,5 +1,6 @@ package net.minestom.server.network.packet.server.play; +import net.minestom.server.network.ConnectionState; import net.minestom.server.network.NetworkBuffer; import net.minestom.server.network.packet.server.ServerPacket; import net.minestom.server.network.packet.server.ServerPacketIdentifier; @@ -18,7 +19,7 @@ public record EndCombatEventPacket(int duration) implements ServerPacket { } @Override - public int getId() { + public int getId(@NotNull ConnectionState state) { return ServerPacketIdentifier.END_COMBAT_EVENT; } } diff --git a/src/main/java/net/minestom/server/network/packet/server/play/EnterCombatEventPacket.java b/src/main/java/net/minestom/server/network/packet/server/play/EnterCombatEventPacket.java index 5d6bedcb4..2d93f07ed 100644 --- a/src/main/java/net/minestom/server/network/packet/server/play/EnterCombatEventPacket.java +++ b/src/main/java/net/minestom/server/network/packet/server/play/EnterCombatEventPacket.java @@ -1,5 +1,6 @@ package net.minestom.server.network.packet.server.play; +import net.minestom.server.network.ConnectionState; import net.minestom.server.network.NetworkBuffer; import net.minestom.server.network.packet.server.ServerPacket; import net.minestom.server.network.packet.server.ServerPacketIdentifier; @@ -16,7 +17,7 @@ public record EnterCombatEventPacket() implements ServerPacket { } @Override - public int getId() { + public int getId(@NotNull ConnectionState state) { return ServerPacketIdentifier.ENTER_COMBAT_EVENT; } } diff --git a/src/main/java/net/minestom/server/network/packet/server/play/EntityAnimationPacket.java b/src/main/java/net/minestom/server/network/packet/server/play/EntityAnimationPacket.java index b555e003d..25ccae097 100644 --- a/src/main/java/net/minestom/server/network/packet/server/play/EntityAnimationPacket.java +++ b/src/main/java/net/minestom/server/network/packet/server/play/EntityAnimationPacket.java @@ -1,5 +1,6 @@ package net.minestom.server.network.packet.server.play; +import net.minestom.server.network.ConnectionState; import net.minestom.server.network.NetworkBuffer; import net.minestom.server.network.packet.server.ServerPacket; import net.minestom.server.network.packet.server.ServerPacketIdentifier; @@ -20,7 +21,7 @@ public record EntityAnimationPacket(int entityId, @NotNull Animation animation) } @Override - public int getId() { + public int getId(@NotNull ConnectionState state) { return ServerPacketIdentifier.ENTITY_ANIMATION; } diff --git a/src/main/java/net/minestom/server/network/packet/server/play/EntityEffectPacket.java b/src/main/java/net/minestom/server/network/packet/server/play/EntityEffectPacket.java index 898298bfe..d5ae7434b 100644 --- a/src/main/java/net/minestom/server/network/packet/server/play/EntityEffectPacket.java +++ b/src/main/java/net/minestom/server/network/packet/server/play/EntityEffectPacket.java @@ -1,5 +1,6 @@ package net.minestom.server.network.packet.server.play; +import net.minestom.server.network.ConnectionState; import net.minestom.server.network.NetworkBuffer; import net.minestom.server.network.packet.server.ServerPacket; import net.minestom.server.network.packet.server.ServerPacketIdentifier; @@ -25,7 +26,7 @@ public record EntityEffectPacket(int entityId, @NotNull Potion potion, } @Override - public int getId() { + public int getId(@NotNull ConnectionState state) { return ServerPacketIdentifier.ENTITY_EFFECT; } } diff --git a/src/main/java/net/minestom/server/network/packet/server/play/EntityEquipmentPacket.java b/src/main/java/net/minestom/server/network/packet/server/play/EntityEquipmentPacket.java index 3a773f2a6..a2136e4b5 100644 --- a/src/main/java/net/minestom/server/network/packet/server/play/EntityEquipmentPacket.java +++ b/src/main/java/net/minestom/server/network/packet/server/play/EntityEquipmentPacket.java @@ -3,6 +3,7 @@ package net.minestom.server.network.packet.server.play; import net.kyori.adventure.text.Component; import net.minestom.server.entity.EquipmentSlot; import net.minestom.server.item.ItemStack; +import net.minestom.server.network.ConnectionState; import net.minestom.server.network.NetworkBuffer; import net.minestom.server.network.packet.server.ComponentHoldingServerPacket; import net.minestom.server.network.packet.server.ServerPacket; @@ -44,7 +45,7 @@ public record EntityEquipmentPacket(int entityId, } @Override - public int getId() { + public int getId(@NotNull ConnectionState state) { return ServerPacketIdentifier.ENTITY_EQUIPMENT; } diff --git a/src/main/java/net/minestom/server/network/packet/server/play/EntityHeadLookPacket.java b/src/main/java/net/minestom/server/network/packet/server/play/EntityHeadLookPacket.java index f01622a5b..aacba8d6b 100644 --- a/src/main/java/net/minestom/server/network/packet/server/play/EntityHeadLookPacket.java +++ b/src/main/java/net/minestom/server/network/packet/server/play/EntityHeadLookPacket.java @@ -1,5 +1,6 @@ package net.minestom.server.network.packet.server.play; +import net.minestom.server.network.ConnectionState; import net.minestom.server.network.NetworkBuffer; import net.minestom.server.network.packet.server.ServerPacket; import net.minestom.server.network.packet.server.ServerPacketIdentifier; @@ -20,7 +21,7 @@ public record EntityHeadLookPacket(int entityId, float yaw) implements ServerPac } @Override - public int getId() { + public int getId(@NotNull ConnectionState state) { return ServerPacketIdentifier.ENTITY_HEAD_LOOK; } } diff --git a/src/main/java/net/minestom/server/network/packet/server/play/EntityMetaDataPacket.java b/src/main/java/net/minestom/server/network/packet/server/play/EntityMetaDataPacket.java index 48ee24e37..ae459ef64 100644 --- a/src/main/java/net/minestom/server/network/packet/server/play/EntityMetaDataPacket.java +++ b/src/main/java/net/minestom/server/network/packet/server/play/EntityMetaDataPacket.java @@ -2,6 +2,7 @@ package net.minestom.server.network.packet.server.play; import net.kyori.adventure.text.Component; import net.minestom.server.entity.Metadata; +import net.minestom.server.network.ConnectionState; import net.minestom.server.network.NetworkBuffer; import net.minestom.server.network.packet.server.ComponentHoldingServerPacket; import net.minestom.server.network.packet.server.ServerPacket; @@ -49,7 +50,7 @@ public record EntityMetaDataPacket(int entityId, } @Override - public int getId() { + public int getId(@NotNull ConnectionState state) { return ServerPacketIdentifier.ENTITY_METADATA; } diff --git a/src/main/java/net/minestom/server/network/packet/server/play/EntityPositionAndRotationPacket.java b/src/main/java/net/minestom/server/network/packet/server/play/EntityPositionAndRotationPacket.java index dda775d62..85cb84b9e 100644 --- a/src/main/java/net/minestom/server/network/packet/server/play/EntityPositionAndRotationPacket.java +++ b/src/main/java/net/minestom/server/network/packet/server/play/EntityPositionAndRotationPacket.java @@ -1,6 +1,7 @@ package net.minestom.server.network.packet.server.play; import net.minestom.server.coordinate.Pos; +import net.minestom.server.network.ConnectionState; import net.minestom.server.network.NetworkBuffer; import net.minestom.server.network.packet.server.ServerPacket; import net.minestom.server.network.packet.server.ServerPacketIdentifier; @@ -27,7 +28,7 @@ public record EntityPositionAndRotationPacket(int entityId, short deltaX, short } @Override - public int getId() { + public int getId(@NotNull ConnectionState state) { return ServerPacketIdentifier.ENTITY_POSITION_AND_ROTATION; } diff --git a/src/main/java/net/minestom/server/network/packet/server/play/EntityPositionPacket.java b/src/main/java/net/minestom/server/network/packet/server/play/EntityPositionPacket.java index ca7c5914d..f64c7e1c6 100644 --- a/src/main/java/net/minestom/server/network/packet/server/play/EntityPositionPacket.java +++ b/src/main/java/net/minestom/server/network/packet/server/play/EntityPositionPacket.java @@ -1,6 +1,7 @@ package net.minestom.server.network.packet.server.play; import net.minestom.server.coordinate.Pos; +import net.minestom.server.network.ConnectionState; import net.minestom.server.network.NetworkBuffer; import net.minestom.server.network.packet.server.ServerPacket; import net.minestom.server.network.packet.server.ServerPacketIdentifier; @@ -25,7 +26,7 @@ public record EntityPositionPacket(int entityId, short deltaX, short deltaY, sho } @Override - public int getId() { + public int getId(@NotNull ConnectionState state) { return ServerPacketIdentifier.ENTITY_POSITION; } diff --git a/src/main/java/net/minestom/server/network/packet/server/play/EntityPropertiesPacket.java b/src/main/java/net/minestom/server/network/packet/server/play/EntityPropertiesPacket.java index 7bf0594f1..153858377 100644 --- a/src/main/java/net/minestom/server/network/packet/server/play/EntityPropertiesPacket.java +++ b/src/main/java/net/minestom/server/network/packet/server/play/EntityPropertiesPacket.java @@ -4,6 +4,7 @@ import net.minestom.server.attribute.Attribute; import net.minestom.server.attribute.AttributeInstance; import net.minestom.server.attribute.AttributeModifier; import net.minestom.server.attribute.AttributeOperation; +import net.minestom.server.network.ConnectionState; import net.minestom.server.network.NetworkBuffer; import net.minestom.server.network.packet.server.ServerPacket; import net.minestom.server.network.packet.server.ServerPacketIdentifier; @@ -57,7 +58,7 @@ public record EntityPropertiesPacket(int entityId, List prope } @Override - public int getId() { + public int getId(@NotNull ConnectionState state) { return ServerPacketIdentifier.ENTITY_PROPERTIES; } } diff --git a/src/main/java/net/minestom/server/network/packet/server/play/EntityRotationPacket.java b/src/main/java/net/minestom/server/network/packet/server/play/EntityRotationPacket.java index d14e760f4..39584e3f1 100644 --- a/src/main/java/net/minestom/server/network/packet/server/play/EntityRotationPacket.java +++ b/src/main/java/net/minestom/server/network/packet/server/play/EntityRotationPacket.java @@ -1,5 +1,6 @@ package net.minestom.server.network.packet.server.play; +import net.minestom.server.network.ConnectionState; import net.minestom.server.network.NetworkBuffer; import net.minestom.server.network.packet.server.ServerPacket; import net.minestom.server.network.packet.server.ServerPacketIdentifier; @@ -21,7 +22,7 @@ public record EntityRotationPacket(int entityId, float yaw, float pitch, boolean } @Override - public int getId() { + public int getId(@NotNull ConnectionState state) { return ServerPacketIdentifier.ENTITY_ROTATION; } } diff --git a/src/main/java/net/minestom/server/network/packet/server/play/EntitySoundEffectPacket.java b/src/main/java/net/minestom/server/network/packet/server/play/EntitySoundEffectPacket.java index d5f34687b..9f393ddcd 100644 --- a/src/main/java/net/minestom/server/network/packet/server/play/EntitySoundEffectPacket.java +++ b/src/main/java/net/minestom/server/network/packet/server/play/EntitySoundEffectPacket.java @@ -2,6 +2,7 @@ package net.minestom.server.network.packet.server.play; import net.kyori.adventure.sound.Sound; import net.minestom.server.adventure.AdventurePacketConvertor; +import net.minestom.server.network.ConnectionState; import net.minestom.server.network.NetworkBuffer; import net.minestom.server.network.packet.server.ServerPacket; import net.minestom.server.network.packet.server.ServerPacketIdentifier; @@ -89,7 +90,7 @@ public record EntitySoundEffectPacket( } @Override - public int getId() { + public int getId(@NotNull ConnectionState state) { return ServerPacketIdentifier.ENTITY_SOUND_EFFECT; } } diff --git a/src/main/java/net/minestom/server/network/packet/server/play/EntityStatusPacket.java b/src/main/java/net/minestom/server/network/packet/server/play/EntityStatusPacket.java index bf341db8c..266179781 100644 --- a/src/main/java/net/minestom/server/network/packet/server/play/EntityStatusPacket.java +++ b/src/main/java/net/minestom/server/network/packet/server/play/EntityStatusPacket.java @@ -1,5 +1,6 @@ package net.minestom.server.network.packet.server.play; +import net.minestom.server.network.ConnectionState; import net.minestom.server.network.NetworkBuffer; import net.minestom.server.network.packet.server.ServerPacket; import net.minestom.server.network.packet.server.ServerPacketIdentifier; @@ -20,7 +21,7 @@ public record EntityStatusPacket(int entityId, byte status) implements ServerPac } @Override - public int getId() { + public int getId(@NotNull ConnectionState state) { return ServerPacketIdentifier.ENTITY_STATUS; } } diff --git a/src/main/java/net/minestom/server/network/packet/server/play/EntityTeleportPacket.java b/src/main/java/net/minestom/server/network/packet/server/play/EntityTeleportPacket.java index b4e46c0e0..33514d52a 100644 --- a/src/main/java/net/minestom/server/network/packet/server/play/EntityTeleportPacket.java +++ b/src/main/java/net/minestom/server/network/packet/server/play/EntityTeleportPacket.java @@ -1,6 +1,7 @@ package net.minestom.server.network.packet.server.play; import net.minestom.server.coordinate.Pos; +import net.minestom.server.network.ConnectionState; import net.minestom.server.network.NetworkBuffer; import net.minestom.server.network.packet.server.ServerPacket; import net.minestom.server.network.packet.server.ServerPacketIdentifier; @@ -27,7 +28,7 @@ public record EntityTeleportPacket(int entityId, Pos position, boolean onGround) } @Override - public int getId() { + public int getId(@NotNull ConnectionState state) { return ServerPacketIdentifier.ENTITY_TELEPORT; } } diff --git a/src/main/java/net/minestom/server/network/packet/server/play/EntityVelocityPacket.java b/src/main/java/net/minestom/server/network/packet/server/play/EntityVelocityPacket.java index bc9744e74..16a6136b5 100644 --- a/src/main/java/net/minestom/server/network/packet/server/play/EntityVelocityPacket.java +++ b/src/main/java/net/minestom/server/network/packet/server/play/EntityVelocityPacket.java @@ -1,6 +1,7 @@ package net.minestom.server.network.packet.server.play; import net.minestom.server.coordinate.Point; +import net.minestom.server.network.ConnectionState; import net.minestom.server.network.NetworkBuffer; import net.minestom.server.network.packet.server.ServerPacket; import net.minestom.server.network.packet.server.ServerPacketIdentifier; @@ -34,7 +35,7 @@ public record EntityVelocityPacket(int entityId, short velocityX, short velocity } @Override - public int getId() { + public int getId(@NotNull ConnectionState state) { return ServerPacketIdentifier.ENTITY_VELOCITY; } } diff --git a/src/main/java/net/minestom/server/network/packet/server/play/ExplosionPacket.java b/src/main/java/net/minestom/server/network/packet/server/play/ExplosionPacket.java index 145d7ced9..232d858eb 100644 --- a/src/main/java/net/minestom/server/network/packet/server/play/ExplosionPacket.java +++ b/src/main/java/net/minestom/server/network/packet/server/play/ExplosionPacket.java @@ -1,5 +1,6 @@ package net.minestom.server.network.packet.server.play; +import net.minestom.server.network.ConnectionState; import net.minestom.server.network.NetworkBuffer; import net.minestom.server.network.packet.server.ServerPacket; import net.minestom.server.network.packet.server.ServerPacketIdentifier; @@ -29,7 +30,7 @@ public record ExplosionPacket(double x, double y, double z, float radius, byte @ } @Override - public int getId() { + public int getId(@NotNull ConnectionState state) { return ServerPacketIdentifier.EXPLOSION; } } diff --git a/src/main/java/net/minestom/server/network/packet/server/play/FacePlayerPacket.java b/src/main/java/net/minestom/server/network/packet/server/play/FacePlayerPacket.java index d4a032143..7419e52da 100644 --- a/src/main/java/net/minestom/server/network/packet/server/play/FacePlayerPacket.java +++ b/src/main/java/net/minestom/server/network/packet/server/play/FacePlayerPacket.java @@ -2,6 +2,7 @@ package net.minestom.server.network.packet.server.play; import net.minestom.server.coordinate.Point; import net.minestom.server.coordinate.Vec; +import net.minestom.server.network.ConnectionState; import net.minestom.server.network.NetworkBuffer; import net.minestom.server.network.packet.server.ServerPacket; import net.minestom.server.network.packet.server.ServerPacketIdentifier; @@ -33,7 +34,7 @@ public record FacePlayerPacket(FacePosition facePosition, } @Override - public int getId() { + public int getId(@NotNull ConnectionState state) { return ServerPacketIdentifier.FACE_PLAYER; } diff --git a/src/main/java/net/minestom/server/network/packet/server/play/HeldItemChangePacket.java b/src/main/java/net/minestom/server/network/packet/server/play/HeldItemChangePacket.java index 9bb5fd2ab..f2345d144 100644 --- a/src/main/java/net/minestom/server/network/packet/server/play/HeldItemChangePacket.java +++ b/src/main/java/net/minestom/server/network/packet/server/play/HeldItemChangePacket.java @@ -1,5 +1,6 @@ package net.minestom.server.network.packet.server.play; +import net.minestom.server.network.ConnectionState; import net.minestom.server.network.NetworkBuffer; import net.minestom.server.network.packet.server.ServerPacket; import net.minestom.server.network.packet.server.ServerPacketIdentifier; @@ -18,7 +19,7 @@ public record HeldItemChangePacket(byte slot) implements ServerPacket { } @Override - public int getId() { + public int getId(@NotNull ConnectionState state) { return ServerPacketIdentifier.HELD_ITEM_CHANGE; } } diff --git a/src/main/java/net/minestom/server/network/packet/server/play/HitAnimationPacket.java b/src/main/java/net/minestom/server/network/packet/server/play/HitAnimationPacket.java index 35a6f2db9..ef8bae0b9 100644 --- a/src/main/java/net/minestom/server/network/packet/server/play/HitAnimationPacket.java +++ b/src/main/java/net/minestom/server/network/packet/server/play/HitAnimationPacket.java @@ -1,5 +1,6 @@ package net.minestom.server.network.packet.server.play; +import net.minestom.server.network.ConnectionState; import net.minestom.server.network.NetworkBuffer; import net.minestom.server.network.packet.server.ServerPacket; import net.minestom.server.network.packet.server.ServerPacketIdentifier; @@ -21,7 +22,7 @@ public record HitAnimationPacket(int entityId, float yaw) implements ServerPacke } @Override - public int getId() { + public int getId(@NotNull ConnectionState state) { return ServerPacketIdentifier.HIT_ANIMATION; } } diff --git a/src/main/java/net/minestom/server/network/packet/server/play/InitializeWorldBorderPacket.java b/src/main/java/net/minestom/server/network/packet/server/play/InitializeWorldBorderPacket.java index caee0a8c2..0aa7aefaa 100644 --- a/src/main/java/net/minestom/server/network/packet/server/play/InitializeWorldBorderPacket.java +++ b/src/main/java/net/minestom/server/network/packet/server/play/InitializeWorldBorderPacket.java @@ -1,5 +1,6 @@ package net.minestom.server.network.packet.server.play; +import net.minestom.server.network.ConnectionState; import net.minestom.server.network.NetworkBuffer; import net.minestom.server.network.packet.server.ServerPacket; import net.minestom.server.network.packet.server.ServerPacketIdentifier; @@ -30,7 +31,7 @@ public record InitializeWorldBorderPacket(double x, double z, } @Override - public int getId() { + public int getId(@NotNull ConnectionState state) { return ServerPacketIdentifier.INITIALIZE_WORLD_BORDER; } } diff --git a/src/main/java/net/minestom/server/network/packet/server/play/JoinGamePacket.java b/src/main/java/net/minestom/server/network/packet/server/play/JoinGamePacket.java index ade33a4f0..c225f295e 100644 --- a/src/main/java/net/minestom/server/network/packet/server/play/JoinGamePacket.java +++ b/src/main/java/net/minestom/server/network/packet/server/play/JoinGamePacket.java @@ -1,6 +1,7 @@ package net.minestom.server.network.packet.server.play; import net.minestom.server.entity.GameMode; +import net.minestom.server.network.ConnectionState; import net.minestom.server.network.NetworkBuffer; import net.minestom.server.network.packet.server.ServerPacket; import net.minestom.server.network.packet.server.ServerPacketIdentifier; @@ -63,7 +64,7 @@ public record JoinGamePacket(int entityId, boolean isHardcore, GameMode gameMode } @Override - public int getId() { + public int getId(@NotNull ConnectionState state) { return ServerPacketIdentifier.JOIN_GAME; } diff --git a/src/main/java/net/minestom/server/network/packet/server/play/MapDataPacket.java b/src/main/java/net/minestom/server/network/packet/server/play/MapDataPacket.java index d06ea31b2..8301956c3 100644 --- a/src/main/java/net/minestom/server/network/packet/server/play/MapDataPacket.java +++ b/src/main/java/net/minestom/server/network/packet/server/play/MapDataPacket.java @@ -1,6 +1,7 @@ package net.minestom.server.network.packet.server.play; import net.kyori.adventure.text.Component; +import net.minestom.server.network.ConnectionState; import net.minestom.server.network.NetworkBuffer; import net.minestom.server.network.packet.server.ServerPacket; import net.minestom.server.network.packet.server.ServerPacketIdentifier; @@ -61,7 +62,7 @@ public record MapDataPacket(int mapId, byte scale, boolean locked, } @Override - public int getId() { + public int getId(@NotNull ConnectionState state) { return ServerPacketIdentifier.MAP_DATA; } diff --git a/src/main/java/net/minestom/server/network/packet/server/play/MultiBlockChangePacket.java b/src/main/java/net/minestom/server/network/packet/server/play/MultiBlockChangePacket.java index 864c38540..dfba170ef 100644 --- a/src/main/java/net/minestom/server/network/packet/server/play/MultiBlockChangePacket.java +++ b/src/main/java/net/minestom/server/network/packet/server/play/MultiBlockChangePacket.java @@ -1,5 +1,6 @@ package net.minestom.server.network.packet.server.play; +import net.minestom.server.network.ConnectionState; import net.minestom.server.network.NetworkBuffer; import net.minestom.server.network.packet.server.ServerPacket; import net.minestom.server.network.packet.server.ServerPacketIdentifier; @@ -24,7 +25,7 @@ public record MultiBlockChangePacket(long chunkSectionPosition, long[] blocks) i } @Override - public int getId() { + public int getId(@NotNull ConnectionState state) { return ServerPacketIdentifier.MULTI_BLOCK_CHANGE; } } diff --git a/src/main/java/net/minestom/server/network/packet/server/play/NbtQueryResponsePacket.java b/src/main/java/net/minestom/server/network/packet/server/play/NbtQueryResponsePacket.java index c7fb8042c..7b5bdf811 100644 --- a/src/main/java/net/minestom/server/network/packet/server/play/NbtQueryResponsePacket.java +++ b/src/main/java/net/minestom/server/network/packet/server/play/NbtQueryResponsePacket.java @@ -1,5 +1,6 @@ package net.minestom.server.network.packet.server.play; +import net.minestom.server.network.ConnectionState; import net.minestom.server.network.NetworkBuffer; import net.minestom.server.network.packet.server.ServerPacket; import net.minestom.server.network.packet.server.ServerPacketIdentifier; @@ -25,7 +26,7 @@ public record NbtQueryResponsePacket(int transactionId, NBTCompound data) implem } @Override - public int getId() { + public int getId(@NotNull ConnectionState state) { return ServerPacketIdentifier.NBT_QUERY_RESPONSE; } } diff --git a/src/main/java/net/minestom/server/network/packet/server/play/OpenBookPacket.java b/src/main/java/net/minestom/server/network/packet/server/play/OpenBookPacket.java index b4a78c6bc..2f2a4a3bd 100644 --- a/src/main/java/net/minestom/server/network/packet/server/play/OpenBookPacket.java +++ b/src/main/java/net/minestom/server/network/packet/server/play/OpenBookPacket.java @@ -1,6 +1,7 @@ package net.minestom.server.network.packet.server.play; import net.minestom.server.entity.Player; +import net.minestom.server.network.ConnectionState; import net.minestom.server.network.NetworkBuffer; import net.minestom.server.network.packet.server.ServerPacket; import net.minestom.server.network.packet.server.ServerPacketIdentifier; @@ -17,7 +18,7 @@ public record OpenBookPacket(@NotNull Player.Hand hand) implements ServerPacket } @Override - public int getId() { + public int getId(@NotNull ConnectionState state) { return ServerPacketIdentifier.OPEN_BOOK; } } diff --git a/src/main/java/net/minestom/server/network/packet/server/play/OpenHorseWindowPacket.java b/src/main/java/net/minestom/server/network/packet/server/play/OpenHorseWindowPacket.java index 03ce46f6d..e984f758e 100644 --- a/src/main/java/net/minestom/server/network/packet/server/play/OpenHorseWindowPacket.java +++ b/src/main/java/net/minestom/server/network/packet/server/play/OpenHorseWindowPacket.java @@ -1,5 +1,6 @@ package net.minestom.server.network.packet.server.play; +import net.minestom.server.network.ConnectionState; import net.minestom.server.network.NetworkBuffer; import net.minestom.server.network.packet.server.ServerPacket; import net.minestom.server.network.packet.server.ServerPacketIdentifier; @@ -20,7 +21,7 @@ public record OpenHorseWindowPacket(byte windowId, int slotCount, int entityId) } @Override - public int getId() { + public int getId(@NotNull ConnectionState state) { return ServerPacketIdentifier.OPEN_HORSE_WINDOW; } } diff --git a/src/main/java/net/minestom/server/network/packet/server/play/OpenSignEditorPacket.java b/src/main/java/net/minestom/server/network/packet/server/play/OpenSignEditorPacket.java index bcacb9632..7c6d848bb 100644 --- a/src/main/java/net/minestom/server/network/packet/server/play/OpenSignEditorPacket.java +++ b/src/main/java/net/minestom/server/network/packet/server/play/OpenSignEditorPacket.java @@ -1,6 +1,7 @@ package net.minestom.server.network.packet.server.play; import net.minestom.server.coordinate.Point; +import net.minestom.server.network.ConnectionState; import net.minestom.server.network.NetworkBuffer; import net.minestom.server.network.packet.server.ServerPacket; import net.minestom.server.network.packet.server.ServerPacketIdentifier; @@ -21,7 +22,7 @@ public record OpenSignEditorPacket(@NotNull Point position, boolean isFrontText) } @Override - public int getId() { + public int getId(@NotNull ConnectionState state) { return ServerPacketIdentifier.OPEN_SIGN_EDITOR; } } diff --git a/src/main/java/net/minestom/server/network/packet/server/play/OpenWindowPacket.java b/src/main/java/net/minestom/server/network/packet/server/play/OpenWindowPacket.java index 839ec7efd..ca260e14f 100644 --- a/src/main/java/net/minestom/server/network/packet/server/play/OpenWindowPacket.java +++ b/src/main/java/net/minestom/server/network/packet/server/play/OpenWindowPacket.java @@ -1,6 +1,7 @@ package net.minestom.server.network.packet.server.play; import net.kyori.adventure.text.Component; +import net.minestom.server.network.ConnectionState; import net.minestom.server.network.NetworkBuffer; import net.minestom.server.network.packet.server.ComponentHoldingServerPacket; import net.minestom.server.network.packet.server.ServerPacket; @@ -28,7 +29,7 @@ public record OpenWindowPacket(int windowId, int windowType, } @Override - public int getId() { + public int getId(@NotNull ConnectionState state) { return ServerPacketIdentifier.OPEN_WINDOW; } diff --git a/src/main/java/net/minestom/server/network/packet/server/play/ParticlePacket.java b/src/main/java/net/minestom/server/network/packet/server/play/ParticlePacket.java index b5e7411d5..a65be24a5 100644 --- a/src/main/java/net/minestom/server/network/packet/server/play/ParticlePacket.java +++ b/src/main/java/net/minestom/server/network/packet/server/play/ParticlePacket.java @@ -1,5 +1,6 @@ package net.minestom.server.network.packet.server.play; +import net.minestom.server.network.ConnectionState; import net.minestom.server.network.NetworkBuffer; import net.minestom.server.network.packet.server.ServerPacket; import net.minestom.server.network.packet.server.ServerPacketIdentifier; @@ -35,7 +36,7 @@ public record ParticlePacket(int particleId, boolean longDistance, } @Override - public int getId() { + public int getId(@NotNull ConnectionState state) { return ServerPacketIdentifier.PARTICLE; } } diff --git a/src/main/java/net/minestom/server/network/packet/server/play/PlayerAbilitiesPacket.java b/src/main/java/net/minestom/server/network/packet/server/play/PlayerAbilitiesPacket.java index 4150dfd26..db3459d39 100644 --- a/src/main/java/net/minestom/server/network/packet/server/play/PlayerAbilitiesPacket.java +++ b/src/main/java/net/minestom/server/network/packet/server/play/PlayerAbilitiesPacket.java @@ -1,5 +1,6 @@ package net.minestom.server.network.packet.server.play; +import net.minestom.server.network.ConnectionState; import net.minestom.server.network.NetworkBuffer; import net.minestom.server.network.packet.server.ServerPacket; import net.minestom.server.network.packet.server.ServerPacketIdentifier; @@ -26,7 +27,7 @@ public record PlayerAbilitiesPacket(byte flags, float flyingSpeed, float fieldVi } @Override - public int getId() { + public int getId(@NotNull ConnectionState state) { return ServerPacketIdentifier.PLAYER_ABILITIES; } } diff --git a/src/main/java/net/minestom/server/network/packet/server/play/PlayerChatMessagePacket.java b/src/main/java/net/minestom/server/network/packet/server/play/PlayerChatMessagePacket.java index 309eac8df..d9afcb06f 100644 --- a/src/main/java/net/minestom/server/network/packet/server/play/PlayerChatMessagePacket.java +++ b/src/main/java/net/minestom/server/network/packet/server/play/PlayerChatMessagePacket.java @@ -3,6 +3,7 @@ package net.minestom.server.network.packet.server.play; import net.kyori.adventure.text.Component; import net.minestom.server.crypto.FilterMask; import net.minestom.server.crypto.SignedMessageBody; +import net.minestom.server.network.ConnectionState; import net.minestom.server.network.NetworkBuffer; import net.minestom.server.network.packet.server.ComponentHoldingServerPacket; import net.minestom.server.network.packet.server.ServerPacket; @@ -48,7 +49,7 @@ public record PlayerChatMessagePacket(UUID sender, int index, byte @Nullable [] } @Override - public int getId() { + public int getId(@NotNull ConnectionState state) { return ServerPacketIdentifier.PLAYER_CHAT; } diff --git a/src/main/java/net/minestom/server/network/packet/server/play/PlayerInfoRemovePacket.java b/src/main/java/net/minestom/server/network/packet/server/play/PlayerInfoRemovePacket.java index 3eb2d15db..6bcc284aa 100644 --- a/src/main/java/net/minestom/server/network/packet/server/play/PlayerInfoRemovePacket.java +++ b/src/main/java/net/minestom/server/network/packet/server/play/PlayerInfoRemovePacket.java @@ -1,5 +1,6 @@ package net.minestom.server.network.packet.server.play; +import net.minestom.server.network.ConnectionState; import net.minestom.server.network.NetworkBuffer; import net.minestom.server.network.packet.server.ServerPacket; import net.minestom.server.network.packet.server.ServerPacketIdentifier; @@ -27,7 +28,7 @@ public record PlayerInfoRemovePacket(@NotNull List<@NotNull UUID> uuids) impleme } @Override - public int getId() { + public int getId(@NotNull ConnectionState state) { return ServerPacketIdentifier.PLAYER_INFO_REMOVE; } } diff --git a/src/main/java/net/minestom/server/network/packet/server/play/PlayerInfoUpdatePacket.java b/src/main/java/net/minestom/server/network/packet/server/play/PlayerInfoUpdatePacket.java index 1d03a5470..d5e93c389 100644 --- a/src/main/java/net/minestom/server/network/packet/server/play/PlayerInfoUpdatePacket.java +++ b/src/main/java/net/minestom/server/network/packet/server/play/PlayerInfoUpdatePacket.java @@ -3,6 +3,7 @@ package net.minestom.server.network.packet.server.play; import net.kyori.adventure.text.Component; import net.minestom.server.crypto.ChatSession; import net.minestom.server.entity.GameMode; +import net.minestom.server.network.ConnectionState; import net.minestom.server.network.NetworkBuffer; import net.minestom.server.network.packet.server.ServerPacket; import net.minestom.server.network.packet.server.ServerPacketIdentifier; @@ -70,7 +71,7 @@ public final class PlayerInfoUpdatePacket implements ServerPacket { } @Override - public int getId() { + public int getId(@NotNull ConnectionState state) { return ServerPacketIdentifier.PLAYER_INFO_UPDATE; } diff --git a/src/main/java/net/minestom/server/network/packet/server/play/PlayerListHeaderAndFooterPacket.java b/src/main/java/net/minestom/server/network/packet/server/play/PlayerListHeaderAndFooterPacket.java index 0d9327c34..1a5d506d4 100644 --- a/src/main/java/net/minestom/server/network/packet/server/play/PlayerListHeaderAndFooterPacket.java +++ b/src/main/java/net/minestom/server/network/packet/server/play/PlayerListHeaderAndFooterPacket.java @@ -1,6 +1,7 @@ package net.minestom.server.network.packet.server.play; import net.kyori.adventure.text.Component; +import net.minestom.server.network.ConnectionState; import net.minestom.server.network.NetworkBuffer; import net.minestom.server.network.packet.server.ComponentHoldingServerPacket; import net.minestom.server.network.packet.server.ServerPacket; @@ -36,7 +37,7 @@ public record PlayerListHeaderAndFooterPacket(@NotNull Component header, } @Override - public int getId() { + public int getId(@NotNull ConnectionState state) { return ServerPacketIdentifier.PLAYER_LIST_HEADER_AND_FOOTER; } } diff --git a/src/main/java/net/minestom/server/network/packet/server/play/PlayerPositionAndLookPacket.java b/src/main/java/net/minestom/server/network/packet/server/play/PlayerPositionAndLookPacket.java index d6abb53b6..55d978b1b 100644 --- a/src/main/java/net/minestom/server/network/packet/server/play/PlayerPositionAndLookPacket.java +++ b/src/main/java/net/minestom/server/network/packet/server/play/PlayerPositionAndLookPacket.java @@ -1,6 +1,7 @@ package net.minestom.server.network.packet.server.play; import net.minestom.server.coordinate.Pos; +import net.minestom.server.network.ConnectionState; import net.minestom.server.network.NetworkBuffer; import net.minestom.server.network.packet.server.ServerPacket; import net.minestom.server.network.packet.server.ServerPacketIdentifier; @@ -28,7 +29,7 @@ public record PlayerPositionAndLookPacket(Pos position, byte flags, int teleport } @Override - public int getId() { + public int getId(@NotNull ConnectionState state) { return ServerPacketIdentifier.PLAYER_POSITION_AND_LOOK; } } \ No newline at end of file diff --git a/src/main/java/net/minestom/server/network/packet/server/play/RemoveEntityEffectPacket.java b/src/main/java/net/minestom/server/network/packet/server/play/RemoveEntityEffectPacket.java index d3140c19e..92f60167e 100644 --- a/src/main/java/net/minestom/server/network/packet/server/play/RemoveEntityEffectPacket.java +++ b/src/main/java/net/minestom/server/network/packet/server/play/RemoveEntityEffectPacket.java @@ -1,5 +1,6 @@ package net.minestom.server.network.packet.server.play; +import net.minestom.server.network.ConnectionState; import net.minestom.server.network.NetworkBuffer; import net.minestom.server.network.packet.server.ServerPacket; import net.minestom.server.network.packet.server.ServerPacketIdentifier; @@ -22,7 +23,7 @@ public record RemoveEntityEffectPacket(int entityId, @NotNull PotionEffect potio } @Override - public int getId() { + public int getId(@NotNull ConnectionState state) { return ServerPacketIdentifier.REMOVE_ENTITY_EFFECT; } } diff --git a/src/main/java/net/minestom/server/network/packet/server/play/RespawnPacket.java b/src/main/java/net/minestom/server/network/packet/server/play/RespawnPacket.java index ce0dc7896..6a33ab89a 100644 --- a/src/main/java/net/minestom/server/network/packet/server/play/RespawnPacket.java +++ b/src/main/java/net/minestom/server/network/packet/server/play/RespawnPacket.java @@ -1,6 +1,7 @@ package net.minestom.server.network.packet.server.play; import net.minestom.server.entity.GameMode; +import net.minestom.server.network.ConnectionState; import net.minestom.server.network.NetworkBuffer; import net.minestom.server.network.packet.server.ServerPacket; import net.minestom.server.network.packet.server.ServerPacketIdentifier; @@ -42,7 +43,7 @@ public record RespawnPacket(String dimensionType, String worldName, } @Override - public int getId() { + public int getId(@NotNull ConnectionState state) { return ServerPacketIdentifier.RESPAWN; } } diff --git a/src/main/java/net/minestom/server/network/packet/server/play/ScoreboardObjectivePacket.java b/src/main/java/net/minestom/server/network/packet/server/play/ScoreboardObjectivePacket.java index 58c949a35..59482be61 100644 --- a/src/main/java/net/minestom/server/network/packet/server/play/ScoreboardObjectivePacket.java +++ b/src/main/java/net/minestom/server/network/packet/server/play/ScoreboardObjectivePacket.java @@ -1,6 +1,7 @@ package net.minestom.server.network.packet.server.play; import net.kyori.adventure.text.Component; +import net.minestom.server.network.ConnectionState; import net.minestom.server.network.NetworkBuffer; import net.minestom.server.network.packet.server.ComponentHoldingServerPacket; import net.minestom.server.network.packet.server.ServerPacket; @@ -50,7 +51,7 @@ public record ScoreboardObjectivePacket(@NotNull String objectiveName, byte mode } @Override - public int getId() { + public int getId(@NotNull ConnectionState state) { return ServerPacketIdentifier.SCOREBOARD_OBJECTIVE; } diff --git a/src/main/java/net/minestom/server/network/packet/server/play/SelectAdvancementTabPacket.java b/src/main/java/net/minestom/server/network/packet/server/play/SelectAdvancementTabPacket.java index ccb1610dc..675b14f10 100644 --- a/src/main/java/net/minestom/server/network/packet/server/play/SelectAdvancementTabPacket.java +++ b/src/main/java/net/minestom/server/network/packet/server/play/SelectAdvancementTabPacket.java @@ -1,5 +1,6 @@ package net.minestom.server.network.packet.server.play; +import net.minestom.server.network.ConnectionState; import net.minestom.server.network.NetworkBuffer; import net.minestom.server.network.packet.server.ServerPacket; import net.minestom.server.network.packet.server.ServerPacketIdentifier; @@ -19,7 +20,7 @@ public record SelectAdvancementTabPacket(@Nullable String identifier) implements } @Override - public int getId() { + public int getId(@NotNull ConnectionState state) { return ServerPacketIdentifier.SELECT_ADVANCEMENT_TAB; } } diff --git a/src/main/java/net/minestom/server/network/packet/server/play/ServerDataPacket.java b/src/main/java/net/minestom/server/network/packet/server/play/ServerDataPacket.java index 94241fa5f..5380aa028 100644 --- a/src/main/java/net/minestom/server/network/packet/server/play/ServerDataPacket.java +++ b/src/main/java/net/minestom/server/network/packet/server/play/ServerDataPacket.java @@ -1,6 +1,7 @@ package net.minestom.server.network.packet.server.play; import net.kyori.adventure.text.Component; +import net.minestom.server.network.ConnectionState; import net.minestom.server.network.NetworkBuffer; import net.minestom.server.network.packet.server.ServerPacket; import net.minestom.server.network.packet.server.ServerPacketIdentifier; @@ -24,7 +25,7 @@ public record ServerDataPacket(@Nullable Component motd, byte @Nullable [] iconB } @Override - public int getId() { + public int getId(@NotNull ConnectionState state) { return ServerPacketIdentifier.SERVER_DATA; } } diff --git a/src/main/java/net/minestom/server/network/packet/server/play/ServerDifficultyPacket.java b/src/main/java/net/minestom/server/network/packet/server/play/ServerDifficultyPacket.java index 2fab78f71..7f6f19e72 100644 --- a/src/main/java/net/minestom/server/network/packet/server/play/ServerDifficultyPacket.java +++ b/src/main/java/net/minestom/server/network/packet/server/play/ServerDifficultyPacket.java @@ -1,5 +1,6 @@ package net.minestom.server.network.packet.server.play; +import net.minestom.server.network.ConnectionState; import net.minestom.server.network.NetworkBuffer; import net.minestom.server.network.packet.server.ServerPacket; import net.minestom.server.network.packet.server.ServerPacketIdentifier; @@ -20,7 +21,7 @@ public record ServerDifficultyPacket(@NotNull Difficulty difficulty, boolean loc } @Override - public int getId() { + public int getId(@NotNull ConnectionState state) { return ServerPacketIdentifier.SERVER_DIFFICULTY; } } diff --git a/src/main/java/net/minestom/server/network/packet/server/play/SetCooldownPacket.java b/src/main/java/net/minestom/server/network/packet/server/play/SetCooldownPacket.java index c05f8b402..ddd0259d4 100644 --- a/src/main/java/net/minestom/server/network/packet/server/play/SetCooldownPacket.java +++ b/src/main/java/net/minestom/server/network/packet/server/play/SetCooldownPacket.java @@ -1,5 +1,6 @@ package net.minestom.server.network.packet.server.play; +import net.minestom.server.network.ConnectionState; import net.minestom.server.network.NetworkBuffer; import net.minestom.server.network.packet.server.ServerPacket; import net.minestom.server.network.packet.server.ServerPacketIdentifier; @@ -19,7 +20,7 @@ public record SetCooldownPacket(int itemId, int cooldownTicks) implements Server } @Override - public int getId() { + public int getId(@NotNull ConnectionState state) { return ServerPacketIdentifier.SET_COOLDOWN; } } diff --git a/src/main/java/net/minestom/server/network/packet/server/play/SetExperiencePacket.java b/src/main/java/net/minestom/server/network/packet/server/play/SetExperiencePacket.java index 006d1a555..e79cde215 100644 --- a/src/main/java/net/minestom/server/network/packet/server/play/SetExperiencePacket.java +++ b/src/main/java/net/minestom/server/network/packet/server/play/SetExperiencePacket.java @@ -1,5 +1,6 @@ package net.minestom.server.network.packet.server.play; +import net.minestom.server.network.ConnectionState; import net.minestom.server.network.NetworkBuffer; import net.minestom.server.network.packet.server.ServerPacket; import net.minestom.server.network.packet.server.ServerPacketIdentifier; @@ -21,7 +22,7 @@ public record SetExperiencePacket(float percentage, int level, int totalExperien } @Override - public int getId() { + public int getId(@NotNull ConnectionState state) { return ServerPacketIdentifier.SET_EXPERIENCE; } } diff --git a/src/main/java/net/minestom/server/network/packet/server/play/SetPassengersPacket.java b/src/main/java/net/minestom/server/network/packet/server/play/SetPassengersPacket.java index de3372751..2e9292811 100644 --- a/src/main/java/net/minestom/server/network/packet/server/play/SetPassengersPacket.java +++ b/src/main/java/net/minestom/server/network/packet/server/play/SetPassengersPacket.java @@ -1,5 +1,6 @@ package net.minestom.server.network.packet.server.play; +import net.minestom.server.network.ConnectionState; import net.minestom.server.network.NetworkBuffer; import net.minestom.server.network.packet.server.ServerPacket; import net.minestom.server.network.packet.server.ServerPacketIdentifier; @@ -26,7 +27,7 @@ public record SetPassengersPacket(int vehicleEntityId, } @Override - public int getId() { + public int getId(@NotNull ConnectionState state) { return ServerPacketIdentifier.SET_PASSENGERS; } } diff --git a/src/main/java/net/minestom/server/network/packet/server/play/SetSlotPacket.java b/src/main/java/net/minestom/server/network/packet/server/play/SetSlotPacket.java index b851b52d5..26f17821e 100644 --- a/src/main/java/net/minestom/server/network/packet/server/play/SetSlotPacket.java +++ b/src/main/java/net/minestom/server/network/packet/server/play/SetSlotPacket.java @@ -2,6 +2,7 @@ package net.minestom.server.network.packet.server.play; import net.kyori.adventure.text.Component; import net.minestom.server.item.ItemStack; +import net.minestom.server.network.ConnectionState; import net.minestom.server.network.NetworkBuffer; import net.minestom.server.network.packet.server.ComponentHoldingServerPacket; import net.minestom.server.network.packet.server.ServerPacket; @@ -31,7 +32,7 @@ public record SetSlotPacket(byte windowId, int stateId, short slot, } @Override - public int getId() { + public int getId(@NotNull ConnectionState state) { return ServerPacketIdentifier.SET_SLOT; } diff --git a/src/main/java/net/minestom/server/network/packet/server/play/SetTitleSubTitlePacket.java b/src/main/java/net/minestom/server/network/packet/server/play/SetTitleSubTitlePacket.java index dc9f83a92..f63a8150d 100644 --- a/src/main/java/net/minestom/server/network/packet/server/play/SetTitleSubTitlePacket.java +++ b/src/main/java/net/minestom/server/network/packet/server/play/SetTitleSubTitlePacket.java @@ -1,6 +1,7 @@ package net.minestom.server.network.packet.server.play; import net.kyori.adventure.text.Component; +import net.minestom.server.network.ConnectionState; import net.minestom.server.network.NetworkBuffer; import net.minestom.server.network.packet.server.ComponentHoldingServerPacket; import net.minestom.server.network.packet.server.ServerPacket; @@ -24,7 +25,7 @@ public record SetTitleSubTitlePacket(@NotNull Component subtitle) implements Com } @Override - public int getId() { + public int getId(@NotNull ConnectionState state) { return ServerPacketIdentifier.SET_TITLE_SUBTITLE; } diff --git a/src/main/java/net/minestom/server/network/packet/server/play/SetTitleTextPacket.java b/src/main/java/net/minestom/server/network/packet/server/play/SetTitleTextPacket.java index c449f8a82..9b3370da1 100644 --- a/src/main/java/net/minestom/server/network/packet/server/play/SetTitleTextPacket.java +++ b/src/main/java/net/minestom/server/network/packet/server/play/SetTitleTextPacket.java @@ -1,6 +1,7 @@ package net.minestom.server.network.packet.server.play; import net.kyori.adventure.text.Component; +import net.minestom.server.network.ConnectionState; import net.minestom.server.network.NetworkBuffer; import net.minestom.server.network.packet.server.ComponentHoldingServerPacket; import net.minestom.server.network.packet.server.ServerPacket; @@ -24,7 +25,7 @@ public record SetTitleTextPacket(@NotNull Component title) implements ComponentH } @Override - public int getId() { + public int getId(@NotNull ConnectionState state) { return ServerPacketIdentifier.SET_TITLE_TEXT; } diff --git a/src/main/java/net/minestom/server/network/packet/server/play/SetTitleTimePacket.java b/src/main/java/net/minestom/server/network/packet/server/play/SetTitleTimePacket.java index 95fa019d0..b90216c97 100644 --- a/src/main/java/net/minestom/server/network/packet/server/play/SetTitleTimePacket.java +++ b/src/main/java/net/minestom/server/network/packet/server/play/SetTitleTimePacket.java @@ -1,5 +1,6 @@ package net.minestom.server.network.packet.server.play; +import net.minestom.server.network.ConnectionState; import net.minestom.server.network.NetworkBuffer; import net.minestom.server.network.packet.server.ServerPacket; import net.minestom.server.network.packet.server.ServerPacketIdentifier; @@ -20,7 +21,7 @@ public record SetTitleTimePacket(int fadeIn, int stay, int fadeOut) implements S } @Override - public int getId() { + public int getId(@NotNull ConnectionState state) { return ServerPacketIdentifier.SET_TITLE_TIME; } } diff --git a/src/main/java/net/minestom/server/network/packet/server/play/SoundEffectPacket.java b/src/main/java/net/minestom/server/network/packet/server/play/SoundEffectPacket.java index a52f5a99c..aa5ff6ce2 100644 --- a/src/main/java/net/minestom/server/network/packet/server/play/SoundEffectPacket.java +++ b/src/main/java/net/minestom/server/network/packet/server/play/SoundEffectPacket.java @@ -3,6 +3,7 @@ package net.minestom.server.network.packet.server.play; import net.kyori.adventure.sound.Sound.Source; import net.minestom.server.adventure.AdventurePacketConvertor; import net.minestom.server.coordinate.Point; +import net.minestom.server.network.ConnectionState; import net.minestom.server.network.NetworkBuffer; import net.minestom.server.network.packet.server.ServerPacket; import net.minestom.server.network.packet.server.ServerPacketIdentifier; @@ -90,7 +91,7 @@ public record SoundEffectPacket( } @Override - public int getId() { + public int getId(@NotNull ConnectionState state) { return ServerPacketIdentifier.SOUND_EFFECT; } diff --git a/src/main/java/net/minestom/server/network/packet/server/play/SpawnEntityPacket.java b/src/main/java/net/minestom/server/network/packet/server/play/SpawnEntityPacket.java index 1e22c06f9..fbb3207e7 100644 --- a/src/main/java/net/minestom/server/network/packet/server/play/SpawnEntityPacket.java +++ b/src/main/java/net/minestom/server/network/packet/server/play/SpawnEntityPacket.java @@ -1,6 +1,7 @@ package net.minestom.server.network.packet.server.play; import net.minestom.server.coordinate.Pos; +import net.minestom.server.network.ConnectionState; import net.minestom.server.network.NetworkBuffer; import net.minestom.server.network.packet.server.ServerPacket; import net.minestom.server.network.packet.server.ServerPacketIdentifier; @@ -42,7 +43,7 @@ public record SpawnEntityPacket(int entityId, @NotNull UUID uuid, int type, } @Override - public int getId() { + public int getId(@NotNull ConnectionState state) { return ServerPacketIdentifier.SPAWN_ENTITY; } } diff --git a/src/main/java/net/minestom/server/network/packet/server/play/SpawnExperienceOrbPacket.java b/src/main/java/net/minestom/server/network/packet/server/play/SpawnExperienceOrbPacket.java index 325ad70a3..cd4135fbc 100644 --- a/src/main/java/net/minestom/server/network/packet/server/play/SpawnExperienceOrbPacket.java +++ b/src/main/java/net/minestom/server/network/packet/server/play/SpawnExperienceOrbPacket.java @@ -1,6 +1,7 @@ package net.minestom.server.network.packet.server.play; import net.minestom.server.coordinate.Pos; +import net.minestom.server.network.ConnectionState; import net.minestom.server.network.NetworkBuffer; import net.minestom.server.network.packet.server.ServerPacket; import net.minestom.server.network.packet.server.ServerPacketIdentifier; @@ -25,7 +26,7 @@ public record SpawnExperienceOrbPacket(int entityId, } @Override - public int getId() { + public int getId(@NotNull ConnectionState state) { return ServerPacketIdentifier.SPAWN_EXPERIENCE_ORB; } } diff --git a/src/main/java/net/minestom/server/network/packet/server/play/SpawnPlayerPacket.java b/src/main/java/net/minestom/server/network/packet/server/play/SpawnPlayerPacket.java index ddaeb7782..df0a3f098 100644 --- a/src/main/java/net/minestom/server/network/packet/server/play/SpawnPlayerPacket.java +++ b/src/main/java/net/minestom/server/network/packet/server/play/SpawnPlayerPacket.java @@ -1,6 +1,7 @@ package net.minestom.server.network.packet.server.play; import net.minestom.server.coordinate.Pos; +import net.minestom.server.network.ConnectionState; import net.minestom.server.network.NetworkBuffer; import net.minestom.server.network.packet.server.ServerPacket; import net.minestom.server.network.packet.server.ServerPacketIdentifier; @@ -30,7 +31,7 @@ public record SpawnPlayerPacket(int entityId, @NotNull UUID playerUuid, } @Override - public int getId() { + public int getId(@NotNull ConnectionState state) { return ServerPacketIdentifier.SPAWN_PLAYER; } } diff --git a/src/main/java/net/minestom/server/network/packet/server/play/SpawnPositionPacket.java b/src/main/java/net/minestom/server/network/packet/server/play/SpawnPositionPacket.java index 905b47a3a..c828e4d79 100644 --- a/src/main/java/net/minestom/server/network/packet/server/play/SpawnPositionPacket.java +++ b/src/main/java/net/minestom/server/network/packet/server/play/SpawnPositionPacket.java @@ -1,6 +1,7 @@ package net.minestom.server.network.packet.server.play; import net.minestom.server.coordinate.Point; +import net.minestom.server.network.ConnectionState; import net.minestom.server.network.NetworkBuffer; import net.minestom.server.network.packet.server.ServerPacket; import net.minestom.server.network.packet.server.ServerPacketIdentifier; @@ -21,7 +22,7 @@ public record SpawnPositionPacket(@NotNull Point position, float angle) implemen } @Override - public int getId() { + public int getId(@NotNull ConnectionState state) { return ServerPacketIdentifier.SPAWN_POSITION; } } diff --git a/src/main/java/net/minestom/server/network/packet/server/play/StatisticsPacket.java b/src/main/java/net/minestom/server/network/packet/server/play/StatisticsPacket.java index 65b6e60b4..ac22a2d50 100644 --- a/src/main/java/net/minestom/server/network/packet/server/play/StatisticsPacket.java +++ b/src/main/java/net/minestom/server/network/packet/server/play/StatisticsPacket.java @@ -1,5 +1,6 @@ package net.minestom.server.network.packet.server.play; +import net.minestom.server.network.ConnectionState; import net.minestom.server.network.NetworkBuffer; import net.minestom.server.network.packet.server.ServerPacket; import net.minestom.server.network.packet.server.ServerPacketIdentifier; @@ -25,7 +26,7 @@ public record StatisticsPacket(@NotNull List statistics) implements S } @Override - public int getId() { + public int getId(@NotNull ConnectionState state) { return ServerPacketIdentifier.STATISTICS; } diff --git a/src/main/java/net/minestom/server/network/packet/server/play/StopSoundPacket.java b/src/main/java/net/minestom/server/network/packet/server/play/StopSoundPacket.java index d1ababbb9..e36ceb98d 100644 --- a/src/main/java/net/minestom/server/network/packet/server/play/StopSoundPacket.java +++ b/src/main/java/net/minestom/server/network/packet/server/play/StopSoundPacket.java @@ -2,6 +2,7 @@ package net.minestom.server.network.packet.server.play; import net.kyori.adventure.sound.Sound; import net.minestom.server.adventure.AdventurePacketConvertor; +import net.minestom.server.network.ConnectionState; import net.minestom.server.network.NetworkBuffer; import net.minestom.server.network.packet.server.ServerPacket; import net.minestom.server.network.packet.server.ServerPacketIdentifier; @@ -41,7 +42,7 @@ public record StopSoundPacket(byte flags, @Nullable Sound.Source source, } @Override - public int getId() { + public int getId(@NotNull ConnectionState state) { return ServerPacketIdentifier.STOP_SOUND; } } diff --git a/src/main/java/net/minestom/server/network/packet/server/play/SystemChatPacket.java b/src/main/java/net/minestom/server/network/packet/server/play/SystemChatPacket.java index 04277f98d..ec6e73eed 100644 --- a/src/main/java/net/minestom/server/network/packet/server/play/SystemChatPacket.java +++ b/src/main/java/net/minestom/server/network/packet/server/play/SystemChatPacket.java @@ -1,6 +1,7 @@ package net.minestom.server.network.packet.server.play; import net.kyori.adventure.text.Component; +import net.minestom.server.network.ConnectionState; import net.minestom.server.network.NetworkBuffer; import net.minestom.server.network.packet.server.ComponentHoldingServerPacket; import net.minestom.server.network.packet.server.ServerPacket; @@ -26,7 +27,7 @@ public record SystemChatPacket(@NotNull Component message, boolean overlay) impl } @Override - public int getId() { + public int getId(@NotNull ConnectionState state) { return ServerPacketIdentifier.SYSTEM_CHAT; } diff --git a/src/main/java/net/minestom/server/network/packet/server/play/TabCompletePacket.java b/src/main/java/net/minestom/server/network/packet/server/play/TabCompletePacket.java index 48a220735..e6612fb5c 100644 --- a/src/main/java/net/minestom/server/network/packet/server/play/TabCompletePacket.java +++ b/src/main/java/net/minestom/server/network/packet/server/play/TabCompletePacket.java @@ -2,6 +2,7 @@ package net.minestom.server.network.packet.server.play; import net.kyori.adventure.text.Component; import net.minestom.server.adventure.ComponentHolder; +import net.minestom.server.network.ConnectionState; import net.minestom.server.network.NetworkBuffer; import net.minestom.server.network.packet.server.ComponentHoldingServerPacket; import net.minestom.server.network.packet.server.ServerPacket; @@ -35,7 +36,7 @@ public record TabCompletePacket(int transactionId, int start, int length, } @Override - public int getId() { + public int getId(@NotNull ConnectionState state) { return ServerPacketIdentifier.TAB_COMPLETE; } diff --git a/src/main/java/net/minestom/server/network/packet/server/play/TeamsPacket.java b/src/main/java/net/minestom/server/network/packet/server/play/TeamsPacket.java index cea40278d..fcdc23563 100644 --- a/src/main/java/net/minestom/server/network/packet/server/play/TeamsPacket.java +++ b/src/main/java/net/minestom/server/network/packet/server/play/TeamsPacket.java @@ -4,6 +4,7 @@ import net.kyori.adventure.text.Component; import net.kyori.adventure.text.format.NamedTextColor; import net.minestom.server.adventure.AdventurePacketConvertor; import net.minestom.server.adventure.ComponentHolder; +import net.minestom.server.network.ConnectionState; import net.minestom.server.network.NetworkBuffer; import net.minestom.server.network.packet.server.ComponentHoldingServerPacket; import net.minestom.server.network.packet.server.ServerPacket; @@ -216,7 +217,7 @@ public record TeamsPacket(String teamName, Action action) implements ComponentHo * @return the identifier */ @Override - public int getId() { + public int getId(@NotNull ConnectionState state) { return ServerPacketIdentifier.TEAMS; } diff --git a/src/main/java/net/minestom/server/network/packet/server/play/TimeUpdatePacket.java b/src/main/java/net/minestom/server/network/packet/server/play/TimeUpdatePacket.java index 681e5f254..0b6e1135e 100644 --- a/src/main/java/net/minestom/server/network/packet/server/play/TimeUpdatePacket.java +++ b/src/main/java/net/minestom/server/network/packet/server/play/TimeUpdatePacket.java @@ -1,5 +1,6 @@ package net.minestom.server.network.packet.server.play; +import net.minestom.server.network.ConnectionState; import net.minestom.server.network.NetworkBuffer; import net.minestom.server.network.packet.server.ServerPacket; import net.minestom.server.network.packet.server.ServerPacketIdentifier; @@ -19,7 +20,7 @@ public record TimeUpdatePacket(long worldAge, long timeOfDay) implements ServerP } @Override - public int getId() { + public int getId(@NotNull ConnectionState state) { return ServerPacketIdentifier.TIME_UPDATE; } } diff --git a/src/main/java/net/minestom/server/network/packet/server/play/TradeListPacket.java b/src/main/java/net/minestom/server/network/packet/server/play/TradeListPacket.java index b3c3d9655..490c08b57 100644 --- a/src/main/java/net/minestom/server/network/packet/server/play/TradeListPacket.java +++ b/src/main/java/net/minestom/server/network/packet/server/play/TradeListPacket.java @@ -1,6 +1,7 @@ package net.minestom.server.network.packet.server.play; import net.minestom.server.item.ItemStack; +import net.minestom.server.network.ConnectionState; import net.minestom.server.network.NetworkBuffer; import net.minestom.server.network.packet.server.ServerPacket; import net.minestom.server.network.packet.server.ServerPacketIdentifier; @@ -34,7 +35,7 @@ public record TradeListPacket(int windowId, @NotNull List trades, } @Override - public int getId() { + public int getId(@NotNull ConnectionState state) { return ServerPacketIdentifier.TRADE_LIST; } diff --git a/src/main/java/net/minestom/server/network/packet/server/play/UnloadChunkPacket.java b/src/main/java/net/minestom/server/network/packet/server/play/UnloadChunkPacket.java index 2856d0846..8b3e98fe1 100644 --- a/src/main/java/net/minestom/server/network/packet/server/play/UnloadChunkPacket.java +++ b/src/main/java/net/minestom/server/network/packet/server/play/UnloadChunkPacket.java @@ -1,5 +1,6 @@ package net.minestom.server.network.packet.server.play; +import net.minestom.server.network.ConnectionState; import net.minestom.server.network.NetworkBuffer; import net.minestom.server.network.packet.server.ServerPacket; import net.minestom.server.network.packet.server.ServerPacketIdentifier; @@ -19,7 +20,7 @@ public record UnloadChunkPacket(int chunkX, int chunkZ) implements ServerPacket } @Override - public int getId() { + public int getId(@NotNull ConnectionState state) { return ServerPacketIdentifier.UNLOAD_CHUNK; } } diff --git a/src/main/java/net/minestom/server/network/packet/server/play/UnlockRecipesPacket.java b/src/main/java/net/minestom/server/network/packet/server/play/UnlockRecipesPacket.java index 9c36cfda4..71b53cafc 100644 --- a/src/main/java/net/minestom/server/network/packet/server/play/UnlockRecipesPacket.java +++ b/src/main/java/net/minestom/server/network/packet/server/play/UnlockRecipesPacket.java @@ -1,5 +1,6 @@ package net.minestom.server.network.packet.server.play; +import net.minestom.server.network.ConnectionState; import net.minestom.server.network.NetworkBuffer; import net.minestom.server.network.packet.server.ServerPacket; import net.minestom.server.network.packet.server.ServerPacketIdentifier; @@ -76,7 +77,7 @@ public record UnlockRecipesPacket(int mode, } @Override - public int getId() { + public int getId(@NotNull ConnectionState state) { return ServerPacketIdentifier.UNLOCK_RECIPES; } } diff --git a/src/main/java/net/minestom/server/network/packet/server/play/UpdateHealthPacket.java b/src/main/java/net/minestom/server/network/packet/server/play/UpdateHealthPacket.java index 2c5f0c391..ac4d0af31 100644 --- a/src/main/java/net/minestom/server/network/packet/server/play/UpdateHealthPacket.java +++ b/src/main/java/net/minestom/server/network/packet/server/play/UpdateHealthPacket.java @@ -1,5 +1,6 @@ package net.minestom.server.network.packet.server.play; +import net.minestom.server.network.ConnectionState; import net.minestom.server.network.NetworkBuffer; import net.minestom.server.network.packet.server.ServerPacket; import net.minestom.server.network.packet.server.ServerPacketIdentifier; @@ -21,7 +22,7 @@ public record UpdateHealthPacket(float health, int food, float foodSaturation) i } @Override - public int getId() { + public int getId(@NotNull ConnectionState state) { return ServerPacketIdentifier.UPDATE_HEALTH; } } diff --git a/src/main/java/net/minestom/server/network/packet/server/play/UpdateLightPacket.java b/src/main/java/net/minestom/server/network/packet/server/play/UpdateLightPacket.java index 07499cd8a..934509db8 100644 --- a/src/main/java/net/minestom/server/network/packet/server/play/UpdateLightPacket.java +++ b/src/main/java/net/minestom/server/network/packet/server/play/UpdateLightPacket.java @@ -1,5 +1,6 @@ package net.minestom.server.network.packet.server.play; +import net.minestom.server.network.ConnectionState; import net.minestom.server.network.NetworkBuffer; import net.minestom.server.network.packet.server.ServerPacket; import net.minestom.server.network.packet.server.ServerPacketIdentifier; @@ -22,7 +23,7 @@ public record UpdateLightPacket(int chunkX, int chunkZ, } @Override - public int getId() { + public int getId(@NotNull ConnectionState state) { return ServerPacketIdentifier.UPDATE_LIGHT; } } diff --git a/src/main/java/net/minestom/server/network/packet/server/play/UpdateScorePacket.java b/src/main/java/net/minestom/server/network/packet/server/play/UpdateScorePacket.java index ce2150a27..d52803236 100644 --- a/src/main/java/net/minestom/server/network/packet/server/play/UpdateScorePacket.java +++ b/src/main/java/net/minestom/server/network/packet/server/play/UpdateScorePacket.java @@ -1,5 +1,6 @@ package net.minestom.server.network.packet.server.play; +import net.minestom.server.network.ConnectionState; import net.minestom.server.network.NetworkBuffer; import net.minestom.server.network.packet.server.ServerPacket; import net.minestom.server.network.packet.server.ServerPacketIdentifier; @@ -34,7 +35,7 @@ public record UpdateScorePacket(@NotNull String entityName, byte action, } @Override - public int getId() { + public int getId(@NotNull ConnectionState state) { return ServerPacketIdentifier.UPDATE_SCORE; } } diff --git a/src/main/java/net/minestom/server/network/packet/server/play/UpdateSimulationDistancePacket.java b/src/main/java/net/minestom/server/network/packet/server/play/UpdateSimulationDistancePacket.java index 8fbf700f9..87515cbf6 100644 --- a/src/main/java/net/minestom/server/network/packet/server/play/UpdateSimulationDistancePacket.java +++ b/src/main/java/net/minestom/server/network/packet/server/play/UpdateSimulationDistancePacket.java @@ -1,5 +1,6 @@ package net.minestom.server.network.packet.server.play; +import net.minestom.server.network.ConnectionState; import net.minestom.server.network.NetworkBuffer; import net.minestom.server.network.packet.server.ServerPacket; import net.minestom.server.network.packet.server.ServerPacketIdentifier; @@ -18,7 +19,7 @@ public record UpdateSimulationDistancePacket(int simulationDistance) implements } @Override - public int getId() { + public int getId(@NotNull ConnectionState state) { return ServerPacketIdentifier.SET_SIMULATION_DISTANCE; } } diff --git a/src/main/java/net/minestom/server/network/packet/server/play/UpdateViewDistancePacket.java b/src/main/java/net/minestom/server/network/packet/server/play/UpdateViewDistancePacket.java index f7aa01c53..318456660 100644 --- a/src/main/java/net/minestom/server/network/packet/server/play/UpdateViewDistancePacket.java +++ b/src/main/java/net/minestom/server/network/packet/server/play/UpdateViewDistancePacket.java @@ -1,5 +1,6 @@ package net.minestom.server.network.packet.server.play; +import net.minestom.server.network.ConnectionState; import net.minestom.server.network.NetworkBuffer; import net.minestom.server.network.packet.server.ServerPacket; import net.minestom.server.network.packet.server.ServerPacketIdentifier; @@ -18,7 +19,7 @@ public record UpdateViewDistancePacket(int viewDistance) implements ServerPacket } @Override - public int getId() { + public int getId(@NotNull ConnectionState state) { return ServerPacketIdentifier.UPDATE_VIEW_DISTANCE; } } diff --git a/src/main/java/net/minestom/server/network/packet/server/play/UpdateViewPositionPacket.java b/src/main/java/net/minestom/server/network/packet/server/play/UpdateViewPositionPacket.java index a8c006b67..91e3b377e 100644 --- a/src/main/java/net/minestom/server/network/packet/server/play/UpdateViewPositionPacket.java +++ b/src/main/java/net/minestom/server/network/packet/server/play/UpdateViewPositionPacket.java @@ -1,5 +1,6 @@ package net.minestom.server.network.packet.server.play; +import net.minestom.server.network.ConnectionState; import net.minestom.server.network.NetworkBuffer; import net.minestom.server.network.packet.server.ServerPacket; import net.minestom.server.network.packet.server.ServerPacketIdentifier; @@ -19,7 +20,7 @@ public record UpdateViewPositionPacket(int chunkX, int chunkZ) implements Server } @Override - public int getId() { + public int getId(@NotNull ConnectionState state) { return ServerPacketIdentifier.UPDATE_VIEW_POSITION; } } diff --git a/src/main/java/net/minestom/server/network/packet/server/play/VehicleMovePacket.java b/src/main/java/net/minestom/server/network/packet/server/play/VehicleMovePacket.java index 71a381796..4572f0d89 100644 --- a/src/main/java/net/minestom/server/network/packet/server/play/VehicleMovePacket.java +++ b/src/main/java/net/minestom/server/network/packet/server/play/VehicleMovePacket.java @@ -1,6 +1,7 @@ package net.minestom.server.network.packet.server.play; import net.minestom.server.coordinate.Pos; +import net.minestom.server.network.ConnectionState; import net.minestom.server.network.NetworkBuffer; import net.minestom.server.network.packet.server.ServerPacket; import net.minestom.server.network.packet.server.ServerPacketIdentifier; @@ -25,7 +26,7 @@ public record VehicleMovePacket(@NotNull Pos position) implements ServerPacket { } @Override - public int getId() { + public int getId(@NotNull ConnectionState state) { return ServerPacketIdentifier.VEHICLE_MOVE; } } diff --git a/src/main/java/net/minestom/server/network/packet/server/play/WindowItemsPacket.java b/src/main/java/net/minestom/server/network/packet/server/play/WindowItemsPacket.java index aae88fa3e..369b3e5e5 100644 --- a/src/main/java/net/minestom/server/network/packet/server/play/WindowItemsPacket.java +++ b/src/main/java/net/minestom/server/network/packet/server/play/WindowItemsPacket.java @@ -2,6 +2,7 @@ package net.minestom.server.network.packet.server.play; import net.kyori.adventure.text.Component; import net.minestom.server.item.ItemStack; +import net.minestom.server.network.ConnectionState; import net.minestom.server.network.NetworkBuffer; import net.minestom.server.network.packet.server.ComponentHoldingServerPacket; import net.minestom.server.network.packet.server.ServerPacket; @@ -35,7 +36,7 @@ public record WindowItemsPacket(byte windowId, int stateId, @NotNull List 0); + public static ByteBuffer createFramedPacket(@NotNull ConnectionState state, @NotNull ByteBuffer buffer, @NotNull ServerPacket packet) { + return createFramedPacket(state, buffer, packet, MinecraftServer.getCompressionThreshold() > 0); } @ApiStatus.Internal - public static FramedPacket allocateTrimmedPacket(@NotNull ServerPacket packet) { + public static FramedPacket allocateTrimmedPacket(@NotNull ConnectionState state, @NotNull ServerPacket packet) { try (var hold = ObjectPool.PACKET_POOL.hold()) { - final ByteBuffer temp = PacketUtils.createFramedPacket(hold.get(), packet); + final ByteBuffer temp = PacketUtils.createFramedPacket(state, hold.get(), packet); final int size = temp.remaining(); final ByteBuffer buffer = ByteBuffer.allocateDirect(size).put(0, temp, 0, size); return new FramedPacket(packet, buffer); @@ -322,7 +324,7 @@ public final class PacketUtils { private synchronized void append(Viewable viewable, ServerPacket serverPacket, Player player) { try (var hold = ObjectPool.PACKET_POOL.hold()) { - final ByteBuffer framedPacket = createFramedPacket(hold.get(), serverPacket); + final ByteBuffer framedPacket = createFramedPacket(player.getPlayerConnection().getConnectionState(), hold.get(), serverPacket); final int packetSize = framedPacket.limit(); if (packetSize >= buffer.capacity()) { process(viewable); diff --git a/src/test/java/net/minestom/server/entity/player/PlayerIntegrationTest.java b/src/test/java/net/minestom/server/entity/player/PlayerIntegrationTest.java index d7b76895f..f88cf76f3 100644 --- a/src/test/java/net/minestom/server/entity/player/PlayerIntegrationTest.java +++ b/src/test/java/net/minestom/server/entity/player/PlayerIntegrationTest.java @@ -4,8 +4,7 @@ import net.minestom.server.event.player.PlayerGameModeChangeEvent; import net.kyori.adventure.text.Component; import net.minestom.server.entity.damage.DamageType; import net.minestom.server.message.ChatMessageType; -import net.minestom.server.network.packet.client.play.ClientSettingsPacket; -import net.minestom.server.event.player.PlayerGameModeChangeEvent; +import net.minestom.server.network.packet.client.common.ClientSettingsPacket; import net.minestom.testing.Collector; import net.minestom.testing.Env; import net.minestom.testing.EnvTest; diff --git a/src/test/java/net/minestom/server/network/PacketWriteReadTest.java b/src/test/java/net/minestom/server/network/PacketWriteReadTest.java index 16fb92661..58131cb39 100644 --- a/src/test/java/net/minestom/server/network/PacketWriteReadTest.java +++ b/src/test/java/net/minestom/server/network/PacketWriteReadTest.java @@ -4,8 +4,6 @@ import com.google.gson.JsonObject; import net.kyori.adventure.bossbar.BossBar; import net.kyori.adventure.text.Component; import net.minestom.server.coordinate.Vec; -import net.minestom.server.crypto.ChatSession; -import net.minestom.server.crypto.PlayerPublicKey; import net.minestom.server.entity.EquipmentSlot; import net.minestom.server.entity.GameMode; import net.minestom.server.entity.Metadata; @@ -13,9 +11,10 @@ import net.minestom.server.entity.PlayerSkin; import net.minestom.server.item.ItemStack; import net.minestom.server.item.Material; import net.minestom.server.network.packet.client.ClientPacket; -import net.minestom.server.network.packet.client.handshake.HandshakePacket; +import net.minestom.server.network.packet.client.handshake.ClientHandshakePacket; import net.minestom.server.network.packet.server.ServerPacket; -import net.minestom.server.network.packet.server.handshake.ResponsePacket; +import net.minestom.server.network.packet.server.common.DisconnectPacket; +import net.minestom.server.network.packet.server.status.ResponsePacket; import net.minestom.server.network.packet.server.login.LoginDisconnectPacket; import net.minestom.server.network.packet.server.login.LoginSuccessPacket; import net.minestom.server.network.packet.server.login.SetCompressionPacket; @@ -30,11 +29,6 @@ import org.junit.jupiter.api.BeforeAll; import org.junit.jupiter.api.Test; import java.lang.reflect.InvocationTargetException; -import java.nio.charset.StandardCharsets; -import java.security.KeyFactory; -import java.security.PublicKey; -import java.security.spec.X509EncodedKeySpec; -import java.time.Instant; import java.util.ArrayList; import java.util.List; import java.util.Map; @@ -167,7 +161,7 @@ public class PacketWriteReadTest { @BeforeAll public static void setupClient() { - CLIENT_PACKETS.add(new HandshakePacket(755, "localhost", 25565, 2)); + CLIENT_PACKETS.add(new ClientHandshakePacket(755, "localhost", 25565, 2)); } @Test diff --git a/src/test/java/net/minestom/server/network/SocketReadTest.java b/src/test/java/net/minestom/server/network/SocketReadTest.java index 0f168ab61..4c8db0970 100644 --- a/src/test/java/net/minestom/server/network/SocketReadTest.java +++ b/src/test/java/net/minestom/server/network/SocketReadTest.java @@ -1,7 +1,7 @@ package net.minestom.server.network; import it.unimi.dsi.fastutil.Pair; -import net.minestom.server.network.packet.client.play.ClientPluginMessagePacket; +import net.minestom.server.network.packet.client.common.ClientPluginMessagePacket; import net.minestom.server.utils.ObjectPool; import net.minestom.server.utils.PacketUtils; import net.minestom.server.utils.Utils; diff --git a/src/test/java/net/minestom/server/network/SocketWriteTest.java b/src/test/java/net/minestom/server/network/SocketWriteTest.java index 1202eeb1f..fa3b83792 100644 --- a/src/test/java/net/minestom/server/network/SocketWriteTest.java +++ b/src/test/java/net/minestom/server/network/SocketWriteTest.java @@ -23,7 +23,7 @@ public class SocketWriteTest { } @Override - public int getId() { + public int getId(@NotNull ConnectionState state) { return 1; } } @@ -35,7 +35,7 @@ public class SocketWriteTest { } @Override - public int getId() { + public int getId(@NotNull ConnectionState state) { return 1; } } diff --git a/src/test/java/net/minestom/server/network/socket/ServerAddressTest.java b/src/test/java/net/minestom/server/network/socket/ServerAddressTest.java index e1e4893de..e3d5357e8 100644 --- a/src/test/java/net/minestom/server/network/socket/ServerAddressTest.java +++ b/src/test/java/net/minestom/server/network/socket/ServerAddressTest.java @@ -1,5 +1,6 @@ package net.minestom.server.network.socket; +import net.minestom.server.listener.manager.PacketListenerManager; import net.minestom.server.network.PacketProcessor; import org.junit.jupiter.api.Test; @@ -19,7 +20,7 @@ public class ServerAddressTest { assumeTrue(System.getenv("GITHUB_ACTIONS") == null); InetSocketAddress address = new InetSocketAddress("localhost", 25565); - var server = new Server(new PacketProcessor()); + var server = new Server(new PacketProcessor(new PacketListenerManager())); server.init(address); assertSame(address, server.socketAddress()); assertEquals(address.getHostString(), server.getAddress()); @@ -35,7 +36,7 @@ public class ServerAddressTest { assumeTrue(System.getenv("GITHUB_ACTIONS") == null); InetSocketAddress address = new InetSocketAddress("localhost", 0); - var server = new Server(new PacketProcessor()); + var server = new Server(new PacketProcessor(new PacketListenerManager())); server.init(address); assertSame(address, server.socketAddress()); assertEquals(address.getHostString(), server.getAddress()); @@ -51,7 +52,7 @@ public class ServerAddressTest { assumeTrue(System.getenv("GITHUB_ACTIONS") == null); UnixDomainSocketAddress address = UnixDomainSocketAddress.of("minestom.sock"); - var server = new Server(new PacketProcessor()); + var server = new Server(new PacketProcessor(new PacketListenerManager())); server.init(address); assertTrue(Files.exists(address.getPath())); assertSame(address, server.socketAddress()); @@ -65,7 +66,7 @@ public class ServerAddressTest { @Test public void noAddressTest() throws IOException { - var server = new Server(new PacketProcessor()); + var server = new Server(new PacketProcessor(new PacketListenerManager())); assertDoesNotThrow(server::stop); } } diff --git a/testing/src/main/java/net/minestom/testing/TestConnectionImpl.java b/testing/src/main/java/net/minestom/testing/TestConnectionImpl.java index fddeae745..64ac3d37f 100644 --- a/testing/src/main/java/net/minestom/testing/TestConnectionImpl.java +++ b/testing/src/main/java/net/minestom/testing/TestConnectionImpl.java @@ -41,7 +41,7 @@ final class TestConnectionImpl implements TestConnection { event.getPlayer().setRespawnPoint(pos); }); - return process.connection().startPlayState(player, true) + return process.connection().startConfigurationState(player, true) .thenApply(unused -> { process.connection().updateWaitingPlayers(); return player; @@ -65,7 +65,7 @@ final class TestConnectionImpl implements TestConnection { } private ServerPacket extractPacket(final SendablePacket packet) { - if (!(packet instanceof ServerPacket serverPacket)) return SendablePacket.extractServerPacket(packet); + if (!(packet instanceof ServerPacket serverPacket)) return SendablePacket.extractServerPacket(getConnectionState(), packet); final Player player = getPlayer(); if (player == null) return serverPacket;