internal static bool FilterClient(WorldRegion region, Client player, Packet packet) { if (packet.PacketID != PlayerPositionLookClient.ID) return false; CoordDouble pos = player.Session.Position; //Inner region if (region.SubRegions.Count == 0) return false; WorldRegion inner = region.SubRegions[0]; //Find proportions between region edges double dOuter = pos.X - region.MinX; dOuter = Math.Min(dOuter, region.MaxX - pos.X); dOuter = Math.Min(dOuter, pos.Z - region.MinZ); dOuter = Math.Min(dOuter, region.MaxZ - pos.Z); double dInner = inner.MinX - pos.X; dInner = Math.Max(dInner, pos.X - inner.MaxX); dInner = Math.Max(dInner, inner.MinZ - pos.Z); dInner = Math.Max(dInner, pos.Z - inner.MaxZ); double frac = dOuter / (dOuter + dInner); #if DEBUG //player.Tell(frac.ToString("0.00") + ": " + dOuter + " " + dInner); #endif player.SendToClient(NightTime(frac)); return false; }
#pragma warning disable 162 static bool Show(Packet packet) { #if !DEBUGPACKET return false; #else byte id = packet.PacketID; if (id == PassThrough.ID) id = packet.PacketBuffer[0]; switch (id) { case EntityHeadYaw.ID: case EntityRelativeMove.ID: case ChunkData.ID: case ChunkDataBulk.ID: case EntityVelocity.ID: case PlayerGround.ID: case EntityLookRelativeMove.ID: return false; default: case LoginSuccess.ID: case SpawnPlayer.ID: case PlayerListItem.ID: return true; } #endif }
public static bool Filter(VanillaSession real, Packet p) { Client player = real.Player; IEntity e = p as IEntity; if (e == null) return false; //Pass all own actions normally if (e.EID == player.EntityID) return false; Client namedPlayer = null; VanillaSession r = World.Main.GetPlayer(e.EID); if (r != null) namedPlayer = r.Player; byte pid = p.PacketID; //New named entity if (pid == SpawnPlayer.ID) { SpawnPlayer spawnNamedEntity = (SpawnPlayer)p; //Search by vanilla uuid since we ahv enot yet modified the packet if (namedPlayer == null) namedPlayer = PlayerList.GetPlayerByVanillaUUID(spawnNamedEntity.PlayerUUID); if (namedPlayer == null) { Debug.WriteLine("NamedEntity not found in player list: " + spawnNamedEntity.PlayerUUID); return false; //Still let through } //pass any none cloaked player if (namedPlayer.Settings.Cloaked == null) return false; //Invisible mode, hide everything about entity if (namedPlayer.Settings.Cloaked == MobType.None.ToString()) return true; if (namedPlayer.Settings.Cloaked == null) { //Debug.WriteLine ("Spawning player " + ne.PlayerName + " as nick " + np.Name); return false; } //Debug.WriteLine ("Spawning player " + ne.PlayerName + " cloaked as \"" + np.Cloaked + "\" nick: " + np.Name); MobType mt; try { mt = (MobType)Enum.Parse(typeof(MobType), namedPlayer.Settings.Cloaked); } catch (Exception) { Debug.WriteLine("Unknown cloak for " + namedPlayer.MinecraftUsername + ": " + namedPlayer.Settings.Cloaked); return false; } SpawnMob ms = new SpawnMob(mt); ms.EID = spawnNamedEntity.EID; ms.Pos = spawnNamedEntity.Position; ms.Pitch = spawnNamedEntity.Pitch; ms.Yaw = spawnNamedEntity.Yaw; //Add metadata to specific mobs - some already set in constructor if (ms.Type == MobType.MagmaCube || ms.Type == MobType.Slime) ms.Metadata.SetByte(16, 1); if (ms.Type == MobType.Ghast) ms.Metadata.SetByte(16, 0); if (ms.Type == MobType.Enderman) { ms.Metadata.SetByte(16, (sbyte)BlockID.Dirt); ms.Metadata.SetByte(17, 0); } if (ms.Type == MobType.Blaze) ms.Metadata.SetByte(16, 0); if (ms.Type == MobType.Sheep) ms.Metadata.SetByte(16, 0); if (ms.Type == MobType.Spider) ms.Metadata.SetByte(16, 0); player.Queue.Queue(ms); return true; } if (pid == DestroyEntities.ID) return false; //Not in list if (namedPlayer == null) return false; //Not cloaked if (namedPlayer.Settings.Cloaked == null) return false; //Invisible mode, hide everything about entity if (namedPlayer.Settings.Cloaked == MobType.None.ToString()) return true; //Else any mob if (pid == Animation.ID) return true; if (pid == EntityEquipment.ID) return true; return false; }
internal static bool FilterServer(WorldSession player, Packet packet) { return packet.PacketID == TimeUpdate.ID; }
public PrevException(Packet p) : base(p == null?"No Error":p.ToString()) { Packet = p; }
public static bool FilterServer(WorldSession player, Packet packet) { if (player.Mode == GameMode.Creative && player.Player.Admin()) return false; byte pid = packet.PacketID; //Never stop raining if (pid == ChangeGameState.ID) { ChangeGameState ns = packet as ChangeGameState; if (ns.Reason == GameState.EndRaining) return true; } //Block Time if (pid == TimeUpdate.ID) { player.Player.SendToClient(new TimeUpdate(18000)); return true; } return false; }
static internal bool FilterClient(Client player, Packet packet) { if (player.Session.Mode == GameMode.Creative) return false; //Pick up lava is drawn into it PlayerBlockPlacement placement = packet as PlayerBlockPlacement; if (placement != null) return CursedLand(player, placement); PlayerDigging pd = packet as PlayerDigging; if (pd != null) if (DiggProtect(player, pd)) return true; return false; }
void ReceiverRunServer() { PacketFromServer p = null; try { thread.State = "Active loop"; while (phase == Phases.Gaming) { try { #if DEBUG prev8 = prev7; prev7 = prev6; prev6 = prev5; prev5 = prev4; prev4 = prev3; prev3 = prev2; prev2 = prev1; prev1 = p; #endif //thread.State = "Active loop, prev: " + p; p = PacketFromServer.ReadServer(serverStream); thread.WatchdogTick = DateTime.Now; Debug.FromServer(p, Player); //thread.State = "Got Packet " + p; } catch (EndOfStreamException) { phase = Phases.FinalClose; return; } catch (IOException) { phase = Phases.FinalClose; return; } catch (ObjectDisposedException) { phase = Phases.FinalClose; return; } catch (Exception e) { if (phase != Phases.FinalClose) { #if DEBUG Log.Write(new PrevException(prev8), Player); Log.Write(new PrevException(prev7), Player); Log.Write(new PrevException(prev6), Player); Log.Write(new PrevException(prev5), Player); Log.Write(new PrevException(prev4), Player); Log.Write(new PrevException(prev3), Player); Log.Write(new PrevException(prev2), Player); Log.Write(new PrevException(prev1), Player); #endif Log.Write(e, Player); phase = Phases.FinalClose; } return; } if (phase == Phases.FinalClose) break; try { FromServerGaming(p); } catch (Exception e) { Log.Write(e, Player); return; } } } finally { thread.State = "Loop ended, closing"; #if DEBUG Console.WriteLine("ServerReceiver Ended: " + Player); #endif serverStream.Close(); thread.State = "Stream closed"; } }