public override void DespawnFromPlayers(Player[] players) { { var fake = new Player(null, null) { ClientUuid = ClientUuid, EntityId = EntityId, NameTag = NameTag, Skin = Skin }; McpePlayerList playerList = McpePlayerList.CreateObject(); playerList.records = new PlayerRemoveRecords { fake }; Level.RelayBroadcast(players, Level.CreateMcpeBatch(playerList.Encode())); playerList.records = null; playerList.PutPool(); } McpeRemoveEntity mcpeRemovePlayer = McpeRemoveEntity.CreateObject(); mcpeRemovePlayer.entityIdSelf = EntityId; Level.RelayBroadcast(players, mcpeRemovePlayer); }
public override void HandleMcpePlayerList(McpePlayerList message) { foreach (var playerRecord in message.records) { Log.Warn($"{playerRecord.GetType()} Player: {playerRecord.DisplayName}, {playerRecord.EntityId}, {playerRecord.ClientUuid}"); } }
public void SpawnToAll(Player newPlayer) { lock (_playerWriteLock) { // The player list keeps us from moving this completely to player. // It's simply to slow and bad. Player[] players = GetSpawnedPlayers(); List <Player> spawnedPlayers = players.ToList(); Player[] sendList = spawnedPlayers.ToArray(); McpePlayerList playerListMessage = McpePlayerList.CreateObject(); playerListMessage.records = new PlayerAddRecords(spawnedPlayers); newPlayer.SendPackage(CreateMcpeBatch(playerListMessage.Encode())); playerListMessage.records = null; playerListMessage.PutPool(); McpePlayerList playerList = McpePlayerList.CreateObject(); playerList.records = new PlayerAddRecords { newPlayer }; RelayBroadcast(newPlayer, sendList, CreateMcpeBatch(playerList.Encode())); playerList.records = null; playerList.PutPool(); newPlayer.SpawnToPlayers(players); foreach (Player spawnedPlayer in players) { spawnedPlayer.SpawnToPlayers(new[] { newPlayer }); } } }
public void DespawnFromAll(Player player) { lock (_playerWriteLock) { var spawnedPlayers = GetSpawnedPlayers(); foreach (Player spawnedPlayer in spawnedPlayers) { spawnedPlayer.DespawnFromPlayers(new[] { player }); } player.DespawnFromPlayers(spawnedPlayers); McpePlayerList playerListMessage = McpePlayerList.CreateObject(); playerListMessage.records = new PlayerRemoveRecords(spawnedPlayers); player.SendPackage(CreateMcpeBatch(playerListMessage.Encode())); playerListMessage.records = null; playerListMessage.PutPool(); McpePlayerList playerList = McpePlayerList.CreateObject(); playerList.records = new PlayerRemoveRecords { player }; RelayBroadcast(player, CreateMcpeBatch(playerList.Encode())); playerList.records = null; playerList.PutPool(); } }
protected virtual void SpawnToAll() { { Player fake = new Player(null, null, 0) { ClientUuid = Uuid, EntityId = EntityId, NameTag = NameTag ?? Name, Skin = Skin }; McpePlayerList playerList = McpePlayerList.CreateObject(); playerList.records = new PlayerAddRecords { fake }; Level.RelayBroadcast(playerList); } McpeAddPlayer message = McpeAddPlayer.CreateObject(); message.uuid = Uuid; message.username = NameTag ?? Name; message.entityId = EntityId; message.x = KnownPosition.X; message.y = KnownPosition.Y; message.z = KnownPosition.Z; message.yaw = KnownPosition.Yaw; message.headYaw = KnownPosition.HeadYaw; message.pitch = KnownPosition.Pitch; message.metadata = GetMetadata(); Level.RelayBroadcast(message); SendEquipment(); SendArmor(); { Player fake = new Player(null, null, 0) { ClientUuid = Uuid, EntityId = EntityId, NameTag = NameTag ?? Name, Skin = Skin }; McpePlayerList playerList = McpePlayerList.CreateObject(); playerList.records = new PlayerRemoveRecords { fake }; Level.RelayBroadcast(playerList); } }
public override void SpawnToPlayer(Player player) { { Player fake = new Player(null, null, 0) { ClientUuid = Uuid, EntityId = EntityId, NameTag = NameTag ?? Name, Skin = Skin }; McpePlayerList playerList = McpePlayerList.CreateObject(); playerList.records = new PlayerAddRecords { fake }; player.SendPackage(playerList); //player.SendDirectPackage(playerList); } { McpeAddPlayer message = McpeAddPlayer.CreateObject(); message.uuid = Uuid; message.username = NameTag ?? Name; message.entityId = EntityId; message.x = KnownPosition.X; message.y = KnownPosition.Y; message.z = KnownPosition.Z; message.yaw = KnownPosition.Yaw; message.headYaw = KnownPosition.HeadYaw; message.pitch = KnownPosition.Pitch; message.metadata = GetMetadata(); player.SendPackage(message); } { McpePlayerEquipment message = McpePlayerEquipment.CreateObject(); message.entityId = EntityId; message.item = ItemInHand; message.slot = 0; player.SendPackage(message); } { McpePlayerArmorEquipment armorEquipment = McpePlayerArmorEquipment.CreateObject(); armorEquipment.entityId = EntityId; armorEquipment.helmet = new MetadataSlot(new ItemStack()); armorEquipment.chestplate = new MetadataSlot(new ItemStack()); armorEquipment.leggings = new MetadataSlot(new ItemStack()); armorEquipment.boots = new MetadataSlot(new ItemStack()); player.SendPackage(armorEquipment); } }
public override void HandleMcpePlayerList(McpePlayerList message) { if (message.records is PlayerAddRecords addRecords) { foreach (var r in addRecords) { var u = new API.Utils.UUID(r.ClientUuid.GetBytes()); if (_players.ContainsKey(u)) { continue; } Texture2D skinTexture; if (r.Skin.TryGetBitmap(out Bitmap skinBitmap)) { skinTexture = TextureUtils.BitmapToTexture2D(BaseClient.WorldProvider.Alex.GraphicsDevice, skinBitmap); } else { BaseClient.WorldProvider.Alex.Resources.ResourcePack.TryGetBitmap("entity/alex", out Bitmap rawTexture); skinTexture = TextureUtils.BitmapToTexture2D(BaseClient.WorldProvider.Alex.GraphicsDevice, rawTexture); } BaseClient.WorldReceiver?.AddPlayerListItem(new PlayerListItem(u, r.DisplayName, Gamemode.Survival, 0)); PlayerMob m = new PlayerMob(r.DisplayName, BaseClient.WorldReceiver as World, BaseClient, skinTexture, true); if (!_players.TryAdd(u, m)) { Log.Warn($"Duplicate player record! {r.ClientUuid}"); } } } else if (message.records is PlayerRemoveRecords removeRecords) { foreach (var r in removeRecords) { var u = new UUID(r.ClientUuid.GetBytes()); if (_players.TryRemove(u, out var player)) { BaseClient.WorldReceiver?.RemovePlayerListItem(u); if (BaseClient.WorldReceiver is World w) { w.DespawnEntity(player.EntityId); } } } } }
public void DespawnFromAll(Player player) { lock (_playerWriteLock) { List <Player> spawnedPlayers = GetSpawnedPlayers().ToList(); McpePlayerList playerListMessage = McpePlayerList.CreateObject(); playerListMessage.records = new PlayerRemoveRecords(spawnedPlayers); var bytes = playerListMessage.Encode(); playerListMessage.records = null; MemoryStream memStream = new MemoryStream(); memStream.Write(BitConverter.GetBytes(Endian.SwapInt32(bytes.Length)), 0, 4); memStream.Write(bytes, 0, bytes.Length); McpeBatch batch = McpeBatch.CreateObject(); byte[] buffer = Player.CompressBytes(memStream.ToArray(), CompressionLevel.Optimal); batch.payloadSize = buffer.Length; batch.payload = buffer; batch.Encode(); player.SendPackage(batch); foreach (Player spawnedPlayer in spawnedPlayers) { SendRemoveForPlayer(player, spawnedPlayer, false); } McpePlayerList playerList = McpePlayerList.CreateObject(); playerList.records = new PlayerRemoveRecords { player }; playerList.Encode(); playerList.records = null; RelayBroadcast(player, playerList); McpeRemovePlayer removePlayerMessage = McpeRemovePlayer.CreateObject(); removePlayerMessage.clientUuid = player.ClientUuid; removePlayerMessage.entityId = player.EntityId; RelayBroadcast(player, removePlayerMessage); } }
public void RemoveFromPlayerList() { var fake = new Player(null, null) { ClientUuid = ClientUuid, EntityId = EntityId, NameTag = NameTag, Skin = Skin }; var players = Level.GetSpawnedPlayers(); var playerList = McpePlayerList.CreateObject(); playerList.records = new PlayerRemoveRecords { fake }; Level.RelayBroadcast(players, Level.CreateMcpeBatch(playerList.Encode())); playerList.records = null; playerList.PutPool(); }
public override void DespawnFromPlayers(Player[] players) { { Player fake = new Player(null, null) { ClientUuid = Uuid, EntityId = EntityId, NameTag = NameTag, Skin = Skin }; McpePlayerList playerList = McpePlayerList.CreateObject(); playerList.records = new PlayerRemoveRecords { fake }; Level.RelayBroadcast(players, playerList); } McpeRemoveEntity mcpeRemovePlayer = McpeRemoveEntity.CreateObject(); mcpeRemovePlayer.entityId = EntityId; Level.RelayBroadcast(players, mcpeRemovePlayer); }
public override void DespawnFromPlayer(Player player) { { Player fake = new Player(null, null, 0) { ClientUuid = Uuid, EntityId = EntityId, NameTag = NameTag ?? Name, Skin = Skin }; McpePlayerList playerList = McpePlayerList.CreateObject(); playerList.records = new PlayerRemoveRecords { fake }; player.SendPackage(playerList); } McpeRemovePlayer mcpeRemovePlayer = McpeRemovePlayer.CreateObject(); mcpeRemovePlayer.entityId = EntityId; mcpeRemovePlayer.clientUuid = Uuid; player.SendPackage(mcpeRemovePlayer); }
public override void SpawnToPlayers(Player[] players) { { Player fake = new Player(null, null) { ClientUuid = Uuid, EntityId = EntityId, NameTag = NameTag, Skin = Skin }; McpePlayerList playerList = McpePlayerList.CreateObject(); playerList.records = new PlayerAddRecords { fake }; Level.RelayBroadcast(players, Level.CreateMcpeBatch(playerList.Encode())); playerList.records = null; playerList.PutPool(); } { McpeAddPlayer message = McpeAddPlayer.CreateObject(); message.uuid = Uuid; message.username = NameTag; message.entityIdSelf = EntityId; message.runtimeEntityId = EntityId; message.x = KnownPosition.X; message.y = KnownPosition.Y; message.z = KnownPosition.Z; message.yaw = KnownPosition.Yaw; message.headYaw = KnownPosition.HeadYaw; message.pitch = KnownPosition.Pitch; message.metadata = GetMetadata(); Level.RelayBroadcast(players, message); } { McpeMobEquipment message = McpeMobEquipment.CreateObject(); message.runtimeEntityId = EntityId; message.item = ItemInHand; message.slot = 0; Level.RelayBroadcast(players, message); } { McpeMobArmorEquipment armorEquipment = McpeMobArmorEquipment.CreateObject(); armorEquipment.runtimeEntityId = EntityId; armorEquipment.helmet = ItemFactory.GetItem(Helmet); armorEquipment.chestplate = ItemFactory.GetItem(Chest); armorEquipment.leggings = ItemFactory.GetItem(Leggings); armorEquipment.boots = ItemFactory.GetItem(Boots); Level.RelayBroadcast(players, armorEquipment); } //{ // Player fake = new Player(null, null) // { // ClientUuid = Uuid, // EntityId = EntityId, // NameTag = NameTag, // Skin = Skin // }; // McpePlayerList playerList = McpePlayerList.CreateObject(); // playerList.records = new PlayerRemoveRecords {fake}; // Level.RelayBroadcast(players, Level.CreateMcpeBatch(playerList.Encode())); // playerList.records = null; // playerList.PutPool(); //} { McpeSetEntityData setEntityData = McpeSetEntityData.CreateObject(); setEntityData.runtimeEntityId = EntityId; setEntityData.metadata = GetMetadata(); Level?.RelayBroadcast(players, setEntityData); } }
public void SpawnToAll(Player newPlayer) { lock (_playerWriteLock) { List <Player> spawnedPlayers = GetSpawnedPlayers().ToList(); spawnedPlayers.Add(newPlayer); Player[] sendList = spawnedPlayers.ToArray(); McpePlayerList playerListMessage = McpePlayerList.CreateObject(); playerListMessage.records = new PlayerAddRecords(spawnedPlayers); var bytes = playerListMessage.Encode(); playerListMessage.records = null; MemoryStream memStream = new MemoryStream(); memStream.Write(BitConverter.GetBytes(Endian.SwapInt32(bytes.Length)), 0, 4); memStream.Write(bytes, 0, bytes.Length); McpeBatch batch = McpeBatch.CreateObject(); byte[] buffer = Player.CompressBytes(memStream.ToArray(), CompressionLevel.Optimal); batch.payloadSize = buffer.Length; batch.payload = buffer; batch.Encode(); newPlayer.SendPackage(batch); McpePlayerList playerList = McpePlayerList.CreateObject(); playerList.records = new PlayerAddRecords { newPlayer }; playerList.Encode(); playerList.records = null; RelayBroadcast(newPlayer, sendList, playerList); McpeAddPlayer mcpeAddPlayer = McpeAddPlayer.CreateObject(); mcpeAddPlayer.uuid = newPlayer.ClientUuid; mcpeAddPlayer.username = newPlayer.Username; mcpeAddPlayer.entityId = newPlayer.EntityId; mcpeAddPlayer.x = newPlayer.KnownPosition.X; mcpeAddPlayer.y = newPlayer.KnownPosition.Y; mcpeAddPlayer.z = newPlayer.KnownPosition.Z; mcpeAddPlayer.yaw = newPlayer.KnownPosition.Yaw; mcpeAddPlayer.headYaw = newPlayer.KnownPosition.HeadYaw; mcpeAddPlayer.pitch = newPlayer.KnownPosition.Pitch; mcpeAddPlayer.metadata = newPlayer.GetMetadata(); RelayBroadcast(newPlayer, sendList, mcpeAddPlayer); McpePlayerEquipment mcpePlayerEquipment = McpePlayerEquipment.CreateObject(); mcpePlayerEquipment.entityId = newPlayer.EntityId; mcpePlayerEquipment.item = new MetadataSlot(newPlayer.Inventory.GetItemInHand()); mcpePlayerEquipment.slot = 0; RelayBroadcast(newPlayer, sendList, mcpePlayerEquipment); McpePlayerArmorEquipment mcpePlayerArmorEquipment = McpePlayerArmorEquipment.CreateObject(); mcpePlayerArmorEquipment.entityId = newPlayer.EntityId; mcpePlayerArmorEquipment.helmet = new MetadataSlot(new ItemStack(newPlayer.Inventory.Helmet, 0)); mcpePlayerArmorEquipment.chestplate = new MetadataSlot(new ItemStack(newPlayer.Inventory.Chest, 0)); mcpePlayerArmorEquipment.leggings = new MetadataSlot(new ItemStack(newPlayer.Inventory.Leggings, 0)); mcpePlayerArmorEquipment.boots = new MetadataSlot(new ItemStack(newPlayer.Inventory.Boots, 0)); RelayBroadcast(newPlayer, sendList, mcpePlayerArmorEquipment); foreach (Player spawnedPlayer in spawnedPlayers) { SendAddForPlayer(newPlayer, spawnedPlayer, false); } } }
public override void SpawnToPlayers(Player[] players) { { var fake = new Player(null, null) { ClientUuid = ClientUuid, EntityId = EntityId, NameTag = NameTag, DisplayName = NameTag, Username = NameTag, Skin = Skin, PlayerInfo = new PlayerInfo { DeviceOS = 7, PlatformChatId = NameTag, } }; var playerList = McpePlayerList.CreateObject(); playerList.records = new PlayerAddRecords { fake }; Level.RelayBroadcast(players, Level.CreateMcpeBatch(playerList.Encode())); playerList.records = null; playerList.PutPool(); } { var message = McpeAddPlayer.CreateObject(); message.uuid = ClientUuid; message.username = NameTag; message.entityIdSelf = EntityId; message.runtimeEntityId = EntityId; message.x = KnownPosition.X; message.y = KnownPosition.Y; message.z = KnownPosition.Z; message.yaw = KnownPosition.Yaw; message.headYaw = KnownPosition.HeadYaw; message.pitch = KnownPosition.Pitch; message.metadata = GetMetadata(); message.userId = -1; Level.RelayBroadcast(players, message); } { var message = McpeMobEquipment.CreateObject(); message.runtimeEntityId = EntityId; message.item = ItemInHand; message.slot = 0; Level.RelayBroadcast(players, message); } { var armorEquipment = McpeMobArmorEquipment.CreateObject(); armorEquipment.runtimeEntityId = EntityId; armorEquipment.helmet = Helmet; armorEquipment.chestplate = Chest; armorEquipment.leggings = Leggings; armorEquipment.boots = Boots; Level.RelayBroadcast(players, armorEquipment); } { var fake = new Player(null, null) { ClientUuid = ClientUuid, EntityId = EntityId, NameTag = NameTag, Skin = Skin }; var playerList = McpePlayerList.CreateObject(); playerList.records = new PlayerRemoveRecords { fake }; Level.RelayBroadcast(players, Level.CreateMcpeBatch(playerList.Encode())); playerList.records = null; playerList.PutPool(); } { var setEntityData = McpeSetEntityData.CreateObject(); setEntityData.runtimeEntityId = EntityId; setEntityData.metadata = GetMetadata(); Level?.RelayBroadcast(players, setEntityData); } }
public virtual void HandleMcpePlayerList(McpePlayerList message) { }
public override void HandleMcpePlayerList(McpePlayerList message) { }
public abstract void HandleMcpePlayerList(McpePlayerList message);
public override void SpawnToPlayers(Player[] players) { { Player fake = new Player(null, null) { ClientUuid = Uuid, EntityId = EntityId, NameTag = NameTag ?? Name, Skin = Skin }; McpePlayerList playerList = McpePlayerList.CreateObject(); playerList.records = new PlayerAddRecords { fake }; Level.RelayBroadcast(players, playerList); } { McpeAddPlayer message = McpeAddPlayer.CreateObject(); message.uuid = Uuid; message.username = NameTag ?? Name; message.entityId = EntityId; message.x = KnownPosition.X; message.y = KnownPosition.Y; message.z = KnownPosition.Z; message.yaw = KnownPosition.Yaw; message.headYaw = KnownPosition.HeadYaw; message.pitch = KnownPosition.Pitch; message.metadata = GetMetadata(); Level.RelayBroadcast(players, message); } { McpePlayerEquipment message = McpePlayerEquipment.CreateObject(); message.entityId = EntityId; message.item = ItemInHand; message.slot = 0; Level.RelayBroadcast(players, message); } { McpePlayerArmorEquipment armorEquipment = McpePlayerArmorEquipment.CreateObject(); armorEquipment.entityId = EntityId; armorEquipment.helmet = ItemFactory.GetItem(Helmet); armorEquipment.chestplate = ItemFactory.GetItem(Chest); armorEquipment.leggings = ItemFactory.GetItem(Leggings); armorEquipment.boots = ItemFactory.GetItem(Boots); Level.RelayBroadcast(players, armorEquipment); } { Player fake = new Player(null, null) { ClientUuid = Uuid, EntityId = EntityId, NameTag = NameTag ?? Name, Skin = Skin }; McpePlayerList playerList = McpePlayerList.CreateObject(); playerList.records = new PlayerRemoveRecords { fake }; Level.RelayBroadcast(players, playerList); } // Probably not needed BroadcastSetEntityData(); }
private void SkinTick(object state) { if (!Monitor.TryEnter(_skinSynk)) { return; } try { foreach (var player in _players.Values) { { if (!player.Username.Equals("gurun")) { continue; } if (_image >= 9) { _image = 0; } _image++; Level level = player.Level; //if (level.TickTime%3 != 0) return; //player.SetNameTag(player.Username + " " + level.TickTime + " testing"); //player.SetDisplayName(player.Username + " " + level.TickTime + " testing"); Skin skin = player.Skin; var texture = skin.Texture; byte[] smiley = GetTextureFromFile(@"D:\Temp\Smiley\big_smile0" + _image + ".png"); if (smiley.Length != 8 * 8 * 4) { return; } int s = 0; int br = 8; int bc = 8; for (int r = 0; r < 8; r++) { for (int c = 0; c < 8; c++) { int i = ((c + bc) * 4) + ((r + br) * 64 * 4); int j = ((c) * 4) + ((r) * 8 * 4); texture[(i) + 0] = smiley[j + 0]; texture[(i) + 1] = smiley[j + 1]; texture[(i) + 2] = smiley[j + 2]; texture[(i) + 3] = smiley[j + 3]; } } { player.SpawnPosition = player.KnownPosition; //level.DespawnFromAll(player); //level.SpawnToAll(player); var players = level.GetSpawnedPlayers(); McpePlayerList playerList = McpePlayerList.CreateObject(); playerList.records = new PlayerAddRecords { player }; level.RelayBroadcast(player, players, CreateMcpeBatch(playerList.Encode())); playerList.records = null; playerList.PutPool(); //player.IsInvisible = true; player.HideNameTag = true; //player.BroadcastSetEntityData(); player.SpawnToPlayers(players); //Thread.Sleep(100); //player.HideNameTag = false; //player.IsInvisible = false; //player.BroadcastSetEntityData(); } } } } finally { Monitor.Exit(_skinSynk); } }