Skip to content

Commit

Permalink
Fix minor bugs (#2759)
Browse files Browse the repository at this point in the history
* add miscellaneous fixes

* Fixed connecting to server when compression threshold is set to 0

The client assumes that 0 means disabled, when on a notchian (vanilla) server, it is possible to set the compression threshold to 0 (compress all packets).

* Try to capture all exceptions through Sentry

No exceptions are being logged through Sentry, so be more aggressive when sending exceptions

(cherry picked from commit eb1c2f5)

* Call OnSpawnPlayer packet when a player is spawned using the SpawnEntity packet

references #2721

(cherry picked from commit ef28ae0)
  • Loading branch information
breadbyte authored Jul 13, 2024
1 parent 2f9cf7b commit c50b360
Show file tree
Hide file tree
Showing 2 changed files with 17 additions and 4 deletions.
5 changes: 5 additions & 0 deletions MinecraftClient/Program.cs
Original file line number Diff line number Diff line change
Expand Up @@ -74,6 +74,11 @@ static void Main(string[] args)
options.EnableTracing = true;
options.SendDefaultPii = false;
});

AppDomain.CurrentDomain.UnhandledException += (sender, eventArgs) =>
{
SentrySdk.CaptureException((Exception)eventArgs.ExceptionObject);
};
}

Task.Run(() =>
Expand Down
16 changes: 12 additions & 4 deletions MinecraftClient/Protocol/Handlers/Protocol18.cs
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
using System;
using System;
using System.Collections.Concurrent;
using System.Collections.Generic;
using System.Diagnostics;
Expand Down Expand Up @@ -72,7 +72,7 @@ class Protocol18Handler : IMinecraftCom
internal const int MC_1_20_2_Version = 764;
internal const int MC_1_20_4_Version = 765;

private int compression_treshold = 0;
private int compression_treshold = -1;
private int autocomplete_transaction_id = 0;
private readonly Dictionary<int, short> window_actions = new();
private CurrentState currentState = CurrentState.Login;
Expand Down Expand Up @@ -345,7 +345,7 @@ internal Tuple<int, Queue<byte>> ReadNextPacket()

//Handle packet decompression
if (protocolVersion >= MC_1_8_Version
&& compression_treshold > 0)
&& compression_treshold >= 0)
{
var sizeUncompressed = dataTypes.ReadNextVarInt(packetData);
if (sizeUncompressed != 0) // != 0 means compressed, let's decompress
Expand Down Expand Up @@ -2196,6 +2196,14 @@ private bool HandlePlayPackets(int packetId, Queue<byte> packetData)
if (handler.GetEntityHandlingEnabled())
{
var entity = dataTypes.ReadNextEntity(packetData, entityPalette, false);

if (protocolVersion >= MC_1_20_2_Version)
{
if (entity.Type == EntityType.Player)
handler.OnSpawnPlayer(entity.ID, entity.UUID, entity.Location, (byte)entity.Yaw, (byte)entity.Pitch);
break;
}

handler.OnSpawnEntity(entity);
}

Expand Down Expand Up @@ -2759,7 +2767,7 @@ private void SendPacket(int packetId, IEnumerable<byte> packetData)
//The inner packet
var thePacket = dataTypes.ConcatBytes(DataTypes.GetVarInt(packetId), packetData.ToArray());

if (compression_treshold > 0) //Compression enabled?
if (compression_treshold >= 0) //Compression enabled?
{
thePacket = thePacket.Length >= compression_treshold
? dataTypes.ConcatBytes(DataTypes.GetVarInt(thePacket.Length), ZlibUtils.Compress(thePacket))
Expand Down

0 comments on commit c50b360

Please sign in to comment.