Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

add play disconnect packet, and it's handler #50

Merged
merged 3 commits into from
May 8, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
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 All @@ -34,7 +35,7 @@ public Task HandleOutgoing(IPacket packet)
}

public bool HandlesIncoming(PacketType type)
=> type is PacketType.CB_Play_KeepAlive or PacketType.CB_Play_BundleDelimiter or PacketType.CB_Play_Ping;
=> type is PacketType.CB_Play_KeepAlive or PacketType.CB_Play_BundleDelimiter or PacketType.CB_Play_Ping or PacketType.CB_Play_KickDisconnect;

private Task HandleKeepAlive(KeepAlivePacket packet)
{
Expand All @@ -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
Loading