diff --git a/MCGalaxy/Modules/Relay/RelayBot.cs b/MCGalaxy/Modules/Relay/RelayBot.cs
index 9328c6944..1d3b7b2d3 100644
--- a/MCGalaxy/Modules/Relay/RelayBot.cs
+++ b/MCGalaxy/Modules/Relay/RelayBot.cs
@@ -31,7 +31,7 @@ namespace MCGalaxy.Modules.Relay
public class RelayUser { public string ID, Nick; }
public delegate void OnDirectMessage(RelayBot bot, string channel, RelayUser user, string message, ref bool cancel);
- /// Called when a user sends a message directly to the relay bot
+ /// Called when an external communication service user sends a message directly to the relay bot
public sealed class OnDirectMessageEvent : IEvent
{
public static void Call(RelayBot bot, string channel, RelayUser user, string message, ref bool cancel) {
@@ -47,7 +47,7 @@ namespace MCGalaxy.Modules.Relay
}
public delegate void OnChannelMessage(RelayBot bot, string channel, RelayUser user, string message, ref bool cancel);
- /// Called when a user sends a message to the given channel
+ /// Called when an external communication service user sends a message to the given channel
public sealed class OnChannelMessageEvent : IEvent
{
public static void Call(RelayBot bot, string channel, RelayUser user, string message, ref bool cancel) {
diff --git a/MCGalaxy/Network/ClassicProtocol.cs b/MCGalaxy/Network/ClassicProtocol.cs
index aa0937aa7..21ab20c2c 100644
--- a/MCGalaxy/Network/ClassicProtocol.cs
+++ b/MCGalaxy/Network/ClassicProtocol.cs
@@ -320,6 +320,20 @@ namespace MCGalaxy.Network
#region Classic packet sending
public void SendTeleport(byte id, Position pos, Orientation rot) {
+ // Some classic < 0.0.19 versions have issues with sending teleport packet with ID 255
+ // 0.0.16a - does nothing
+ // 0.0.17a - does nothing
+ // 0.0.18a - works fine (https://minecraft.fandom.com/wiki/Java_Edition_Classic_0.0.18a)
+ // Skins weren't implemented until 0.0.19a, so it's fine to spam send SpawnEntity packets
+ // (downside is that client's respawn position is also changed due to using SpawnEntity)
+ // Unfortunately, there is no easy way to tell the difference between 0.0.17a and 0.0.18a,
+ // so this workaround still affects 0.0.18 clients even though it is unnecessary
+ if (id == Entities.SelfID && player.ProtocolVersion < Server.VERSION_0019) {
+ // TODO keep track of 'last spawn name', in case self entity name was changed by OnEntitySpawnedEvent
+ SendSpawnEntity(id, player.color + player.truename, player.SkinName, pos, rot);
+ return;
+ }
+
// NOTE: Classic clients require offseting own entity by 22 units vertically
if (id == Entities.SelfID) pos.Y -= 22;