public override void FromClient(PacketFromClient packet) { switch (packet.PacketID) { #region Block place/break case PlayerDigging.ID: PlayerDigging pd = packet as PlayerDigging; if (pd.Status == PlayerDigging.StatusEnum.FinishedDigging) QueueToAll(new BlockChange(pd.Position, BlockID.Air)); return; /* TODO: fix: crashes with new items such as pot case PlayerBlockPlacement.ID: PlayerBlockPlacement pbp = packet as PlayerBlockPlacement; if(pbp.Item == null) return; var bc = new BlockChange(pbp.BlockPosition.Offset(pbp.FaceDirection), pbp.Item.ItemID); bc.Metadata = (byte)pbp.Item.Uses; QueueToAll(bc); return;*/ #endregion #region Moving Looking case PlayerPositionLookClient.ID: { PlayerPositionLookClient p = (PlayerPositionLookClient)packet; SetPosition(p.Position, true); Pitch = p.Pitch; Yaw = p.Yaw; if (Player.Settings.Cloaked == null) { EntityTeleport et = new EntityTeleport(Player.EntityID, p.Position); et.Yaw = p.Yaw; et.Pitch = p.Pitch; QueueToAllButMe(et); QueueToAllButMe(new EntityHeadYaw(Player.EntityID, Yaw)); } CheckPosition(); return; } #endregion case UseEntity.ID: //UseEntity ue = (UseEntity)packet; //Sender see hurt //New: hurt attacker, old: ue.Target QueueToAll(new EntityStatus(this.Player.EntityID, EntityStatuses.EntityHurt)); QueueToAll(new Effect(SoundEffects.MobSpawn, Position.CloneInt())); return; #if DEBUG case PlayerGround.ID: case KeepAlivePing.ID://case KeepAlivePong.ID: return; default: //Console.WriteLine("Unhandled: " + packet); return; #endif } }
private void SendToPossessors(PacketFromClient p) { var pby = PossessedBy; if (pby.Length == 0) return; VanillaSession real = Session as VanillaSession; PacketFromServer ps = null; switch (p.PacketID) { case PlayerPositionLookClient.ID: { if (real == null) return; var pl = (PlayerPositionLookClient)p; var et = new EntityTeleport(real.EID, pl.Position); et.Yaw = pl.Yaw; et.Pitch = pl.Pitch; EntityHeadYaw hy = new EntityHeadYaw(real.EID, pl.Yaw); foreach (WorldSession s in pby) { s.Player.Queue.Queue(et); s.Player.Queue.Queue(hy); } } return; } if (ps == null) return; foreach (WorldSession s in pby) s.Player.Queue.Queue(ps); }