Skip to content

Commit

Permalink
add play disconnect packet, and it's handler
Browse files Browse the repository at this point in the history
  • Loading branch information
qwqtoday committed May 6, 2024
1 parent f162e4b commit 325cfd7
Show file tree
Hide file tree
Showing 3 changed files with 55 additions and 3 deletions.
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
using MineSharp.ChatComponent;
using MineSharp.Core.Common;
using MineSharp.Data;
using MineSharp.Data.Protocol;

namespace MineSharp.Protocol.Packets.Clientbound.Play;
#pragma warning disable CS1591
/// <summary>
/// Disconnect packet for play
/// </summary>
public class DisconnectPacket : IPacket
{
/// <inheritdoc />
public PacketType Type => PacketType.CB_Play_KickDisconnect;

/// <summary>
/// The reason for being disconnected
/// </summary>
public Chat Reason { get; set; }

/// <summary>
/// Create a new instance
/// </summary>
/// <param name="reason"></param>
public DisconnectPacket(Chat reason)
{
this.Reason = reason;
}

/// <inheritdoc />
public void Write(PacketBuffer buffer, MinecraftData version)
{
buffer.WriteString(this.Reason.Json);
}

/// <inheritdoc />
public static IPacket Read(PacketBuffer buffer, MinecraftData version)
{
string reason = buffer.ReadString();
return new DisconnectPacket(new Chat(reason, version));
}
}
#pragma warning restore CS1591
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
using MineSharp.Data;
using MineSharp.Data;
using MineSharp.Data.Protocol;
using MineSharp.Protocol.Packets.Clientbound.Play;
using MineSharp.Protocol.Packets.Serverbound.Play;
Expand All @@ -24,6 +24,7 @@ public Task HandleIncoming(IPacket packet)
KeepAlivePacket keepAlive => HandleKeepAlive(keepAlive),
BundleDelimiterPacket bundleDelimiter => HandleBundleDelimiter(bundleDelimiter),
PingPacket ping => HandlePing(ping),
DisconnectPacket disconnect => HandleDisconnect(disconnect),
_ => Task.CompletedTask
};
}
Expand Down Expand Up @@ -53,4 +54,10 @@ private Task HandlePing(PingPacket ping)
this._client.SendPacket(new PongPacket(ping.Id));
return Task.CompletedTask;
}

private Task HandleDisconnect(DisconnectPacket packet)
{
_ = Task.Run(() => this._client.Disconnect(packet.Reason.Json));
return Task.CompletedTask;
}
}
6 changes: 4 additions & 2 deletions Components/MineSharp.Protocol/Packets/PacketPalette.cs
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
using MineSharp.Core.Common;
using MineSharp.Core.Common;
using MineSharp.Data;
using MineSharp.Data.Protocol;
using MineSharp.Protocol.Packets.Clientbound.Configuration;
Expand All @@ -18,6 +18,7 @@
using SBChatPacket = MineSharp.Protocol.Packets.Serverbound.Play.ChatPacket;
using LoginDisconnectPacket = MineSharp.Protocol.Packets.Clientbound.Login.DisconnectPacket;
using ConfigurationDisconnectPacket = MineSharp.Protocol.Packets.Clientbound.Configuration.DisconnectPacket;
using PlayDisconnectPacket = MineSharp.Protocol.Packets.Clientbound.Play.DisconnectPacket;
using CBConfigurationKeepAlivePacket = MineSharp.Protocol.Packets.Clientbound.Configuration.KeepAlivePacket;
using SBConfigurationKeepAlivePacket = MineSharp.Protocol.Packets.Serverbound.Configuration.KeepAlivePacket;
using CBPluginMessagePacket = MineSharp.Protocol.Packets.Clientbound.Configuration.PluginMessagePacket;
Expand Down Expand Up @@ -149,7 +150,8 @@ private static void InitializePackets()
RegisterPacket<ChunkBatchStartPacket>(PacketType.CB_Play_ChunkBatchStart);
RegisterPacket<ChunkBatchFinishedPacket>(PacketType.CB_Play_ChunkBatchFinished);
RegisterPacket<PlayPingPacket>(PacketType.CB_Play_Ping);

RegisterPacket<PlayDisconnectPacket>(PacketType.CB_Play_KickDisconnect);

RegisterPacket<SBKeepAlivePacket>(PacketType.SB_Play_KeepAlive);
RegisterPacket<SetPlayerPositionPacket>(PacketType.SB_Play_Position);
RegisterPacket<SetPlayerPositionAndRotationPacket>(PacketType.SB_Play_PositionLook);
Expand Down

0 comments on commit 325cfd7

Please sign in to comment.