diff --git a/MCGalaxy/Levels/LevelOptions.cs b/MCGalaxy/Levels/LevelOptions.cs index 3d1d96794..20e6d7510 100644 --- a/MCGalaxy/Levels/LevelOptions.cs +++ b/MCGalaxy/Levels/LevelOptions.cs @@ -77,8 +77,15 @@ namespace MCGalaxy { Player[] players = PlayerInfo.Online.Items; foreach (Player pl in players) { - if (pl.level != lvl || !pl.HasCpeExt(CpeExt.HackControl)) continue; - pl.Send(Hacks.MakeHackControl(pl)); + // Unfortunately, some clients will freeze or crash if we send a MOTD packet, + // but don't follow it up by a new map. Thus, we have to use the ugly approach + // of only sending to whitelisted clients. + if (pl.appName != null && pl.appName.CaselessStarts("classicalsharp")) { + pl.SendMapMotd(); + } else { + LevelActions.ReloadMap(p, pl, false); + if (pl.HasCpeExt(CpeExt.HackControl)) pl.Send(Hacks.MakeHackControl(pl)); + } } } diff --git a/MCGalaxy/Player/PlayerPhysics.cs b/MCGalaxy/Player/PlayerPhysics.cs index a920fc160..8d766144c 100644 --- a/MCGalaxy/Player/PlayerPhysics.cs +++ b/MCGalaxy/Player/PlayerPhysics.cs @@ -69,8 +69,8 @@ namespace MCGalaxy.Blocks.Physics { allGas = allGas && collide == CollideType.WalkThrough; if (!CollideType.IsSolid(collide)) continue; - int fallHeight = (p.startFallY - bb.Min.Y) / 32; - if (fallHeight > p.level.Config.FallHeight) + int fallHeight = p.startFallY - bb.Min.Y; + if (fallHeight > p.level.Config.FallHeight * 32) p.HandleDeath(ExtBlock.Air, null, false, true); p.startFallY = -1;