public static void EncryptionKeyRequest(MinecraftClient client, IPacket _packet) { var packet = (EncryptionKeyRequestPacket)_packet; var random = RandomNumberGenerator.Create(); client.SharedSecret = new byte[16]; random.GetBytes(client.SharedSecret); // Generate a secure AES key if (packet.ServerId != "-") // Online mode { // Authenticate with minecraft.net var data = Encoding.ASCII.GetBytes(packet.ServerId) .Concat(client.SharedSecret) .Concat(packet.PublicKey).ToArray(); var hash = Cryptography.JavaHexDigest(data); var webClient = new WebClient(); string result = webClient.DownloadString("http://session.minecraft.net/game/joinserver.jsp?user="******"&sessionId=" + Uri.EscapeUriString(client.Session.SessionId) + "&serverId=" + Uri.EscapeUriString(hash)); if (result != "OK") LogProvider.Log("Unable to verify session: " + result); } var parser = new AsnKeyParser(packet.PublicKey); var key = parser.ParseRSAPublicKey(); // Encrypt shared secret and verification token var crypto = new RSACryptoServiceProvider(); crypto.ImportParameters(key); var encryptedSharedSecret = crypto.Encrypt(client.SharedSecret, false); var encryptedVerification = crypto.Encrypt(packet.VerificationToken, false); var response = new EncryptionKeyResponsePacket(encryptedSharedSecret, encryptedVerification); client.SendPacket(response); }
public MinecraftPacket(MinecraftClient client, MinecraftPacket packet) { Client = client; Length = packet.Length; Id = packet.Id; Data = packet.Data; }
/// <summary> /// lerp size /// </summary> public SP3DWorldBorder(MinecraftClient client, double oldDiameter, double newDiameter, long speed) : base(client) { Action = Data.WriteVarInt(1); OldDiameter = Data.WriteDouble(oldDiameter); NewDiameter = Data.WriteDouble(newDiameter); Speed = Data.WriteVarLong(speed); }
public static void ChatMessage(MinecraftClient client, IPacket _packet) { var packet = (ChatMessagePacket)_packet; LogProvider.Log(packet.Message, LogImportance.High); client.OnChatMessage(new ChatMessageEventArgs(packet.Message, RemoveChatCodes(packet.Message))); }
public CH00Handshake(MinecraftClient client, Stream stream) : base(client, stream) { ProtocolVersion = Data.ReadVarInt(); ServerAddress = Data.ReadString(); ServerPort = Data.ReadUnsignedShort(); NextState = (ProtocolState)Data.ReadVarInt(); }
public static void Disconnect(MinecraftClient client, IPacket _packet) { var packet = (DisconnectPacket)_packet; LogProvider.Log("Disconnected: " + packet.Reason); client.OnDisconnected(new DisconnectEventArgs(packet.Reason)); }
public override void HandlePacket(MinecraftServer server, MinecraftClient client) { if (!client.ReadyToSpawn) return; client.Entity.Pitch = Pitch; client.Entity.Yaw = Yaw; }
public static void CreativeInventoryAction(MinecraftClient client, MinecraftServer server, IPacket _packet) { var packet = (CreativeInventoryActionPacket)_packet; if (packet.SlotIndex == -1) { var entity = new ItemEntity(client.Entity.GivenPosition + new Vector3(0, client.Entity.Size.Height, 0), packet.Item); entity.Velocity = MathHelper.FowardVector(client.Entity) * new Vector3(0.25); server.EntityManager.SpawnEntity(client.World, entity); } else if (packet.SlotIndex < client.Entity.Inventory.Length && packet.SlotIndex > 0) { client.Entity.Inventory[packet.SlotIndex] = packet.Item; if (packet.SlotIndex == client.Entity.SelectedSlot) { var clients = server.EntityManager.GetKnownClients(client.Entity); foreach (var _client in clients) { _client.SendPacket(new EntityEquipmentPacket(client.Entity.Id, EntityEquipmentPacket.EntityEquipmentSlot.HeldItem, client.Entity.Inventory[packet.SlotIndex])); } } } }
public void Send(ref MinecraftClient client, GameStream stream) { byte[] array = File.ReadAllBytes(Config.IconFile); string image = Convert.ToBase64String(array); string responseStr = "{" + "\"version\": {" + "\"name\": \"" + MinecraftVersion.Current + "\"," + "\"protocol\": " + MinecraftVersion.Current.Protocol + "}," + "\"players\": {" + "\"max\":" + PlayerList.MaxPlayers + "," + "\"online\":" + PlayerList.Online + "," + "\"sample\": [{\"name\": \"CopperPenguin96\", \"id\":\"be57c0e9-0832-48a7-9940-2baf96b32f92\"}]}," + "\"description\": " + Chat.Format(Config.MessageOfTheDay, null) + "," + "\"favicon\": \"data:image/png;base64," + image + "\" }"; var writer = File.CreateText("new2.json"); writer.WriteLine(responseStr); writer.Flush(); writer.Close(); Protocol.Send(ref client, stream, Packet, responseStr); }
public MinecraftClient newMinecraftClient() { MinecraftClient mcClient = new MinecraftClient(); AddChild(mcClient); return(mcClient); }
public void Send(ref MinecraftClient client, GameStream stream) { int data = 0; switch (_entity.Identifier.Name) { case "item_frame": ItemFrame iFrame = (ItemFrame)_entity; data = iFrame.Rotation; break; case "falling_block": /*FallingBlock fBlock = (FallingBlock) _entity; * data = fBlock.World.GetAtPosition(fBlock.SpawnPosition).State*/ break; case "fishing_hook": FishingHook fHook = (FishingHook)_entity; data = fHook.HookedId; break; } Protocol.Send(ref client, stream, Packet, _entity.Id, _entity.UniqueId.ToString(), _entity.Type, _entity.Position.X, _entity.Position.Y, _entity.Position.Z, _entity.Position.Pitch, _entity.Position.Yaw, data, (short)_entity.Velocity.X, (short)_entity.Velocity.Y, (short)_entity.Velocity.Z); }
public static void Animation(MinecraftClient client, MinecraftServer server, IPacket _packet) { var packet = (AnimationPacket)_packet; var clients = server.EntityManager.GetKnownClients(client.Entity); foreach (var _client in clients) _client.SendPacket(packet); }
public static void EntityAction(MinecraftClient client, MinecraftServer server, IPacket _packet) { var packet = (EntityActionPacket)_packet; switch (packet.Action) { case EntityActionPacket.EntityAction.Crouch: client.Entity.IsCrouching = true; break; case EntityActionPacket.EntityAction.Uncrouch: client.Entity.IsCrouching = false; break; case EntityActionPacket.EntityAction.StartSprinting: client.Entity.IsSprinting = true; break; case EntityActionPacket.EntityAction.StopSprinting: client.Entity.IsSprinting = false; break; case EntityActionPacket.EntityAction.LeaveBed: client.Entity.LeaveBed(); break; } if (packet.Action != EntityActionPacket.EntityAction.LeaveBed) // NOTE: Does this matter? { // TODO ? } }
public static void EncryptionKeyResponse(MinecraftClient client, MinecraftServer server, IPacket _packet) { var packet = (EncryptionKeyResponsePacket)_packet; client.SharedKey = server.CryptoServiceProvider.Decrypt(packet.SharedSecret, false); client.SendPacket(new EncryptionKeyResponsePacket(new byte[0], new byte[0])); }
public void Send(ref MinecraftClient client, GameStream stream) { // manually send this packet VarInt id = (byte)Packet; VarInt length = 0; VarInt arrayLength = _stats.Length; length += arrayLength.Length; foreach (Statistic stat in _stats) { length += stat.Id.Length; length += stat.Value.Length; length += stat.Category.Length; } // write the packet info stream.WriteVarInt(length); stream.WriteVarInt(id); // Write the length stream.WriteVarInt(arrayLength); // write each item foreach (Statistic stat in _stats) { stream.WriteVarInt(stat.Category); stream.WriteVarInt(stat.Id); stream.WriteVarInt(stat.Value); } stream.Flush(); }
public static void PlayerLook(MinecraftClient client, MinecraftServer server, IPacket _packet) { var packet = (PlayerLookPacket)_packet; client.Entity.Pitch = packet.Pitch; client.Entity.Yaw = packet.Yaw; }
public static void ExecuteCommand(Server server, MinecraftClient user, string text) { string name = text.Substring(1); if (string.IsNullOrEmpty(name)) { return; } var parameters = new string[0]; var userText = ""; if (name.Contains(" ")) { name = name.Remove(name.IndexOf(' ')); userText = text.Substring(text.IndexOf(' ') + 1); parameters = userText.Split(' '); } var command = GetCommand(name); if (command == null) { user.SendChat(ChatColors.Red + "That command was not found."); return; } if (!MayUseCommand(command, user, server)) { user.SendChat(ChatColors.Red + "You do not have permission to use that command."); return; } command.Execute(server, user, userText, parameters); }
public SP35UnlockRecipes(MinecraftClient client, RecipeAction action, bool craftingRecipeBookOpen, bool craftingRecipeBookFilterActive, bool smeltingRecipeBookOpen, bool smeltingRecipeBookFilterActive, bool blastFurnaceRecipeBookOpen, bool blastFurnaceRecipeBookFilterActive, bool smokerRecipeBookOpen, bool smokerRecipeBookFilterActive, Identifier[] recipeIds, Identifier[] recipeIdsInit = null) : base(client) { Action = (RecipeAction)Data.WriteVarInt((int)action); CraftingRecipeBookOpen = Data.WriteBoolean(craftingRecipeBookOpen); CraftingRecipeBookFilterActive = Data.WriteBoolean(craftingRecipeBookFilterActive); SmeltingRecipeBookOpen = Data.WriteBoolean(smeltingRecipeBookOpen); SmeltingRecipeBookFilterActive = Data.WriteBoolean(smeltingRecipeBookFilterActive); BlastFurnaceRecipeBookOpen = Data.WriteBoolean(blastFurnaceRecipeBookOpen); BlastFurnaceRecipeBookFilterActive = Data.WriteBoolean(blastFurnaceRecipeBookFilterActive); SmokerRecipeBookOpen = Data.WriteBoolean(smokerRecipeBookOpen); SmokerRecipeBookFilterActive = Data.WriteBoolean(smokerRecipeBookFilterActive); Data.WriteVarInt(recipeIds.Length); RecipeIds = Data.WriteArray <Identifier, DataTypes.Identifier>(recipeIds); if (action == RecipeAction.Init) { if (recipeIdsInit != null) { Data.WriteVarInt(recipeIdsInit.Length); RecipeIdsInit = Data.WriteArray <Identifier, DataTypes.Identifier>(recipeIdsInit); } else { throw new System.ArgumentNullException(nameof(recipeIdsInit), "recipeIdsInit should be provided when action is init!"); } } }
public SP29EntityRotation(MinecraftClient client, int entityId, float yaw, float pitch, bool onGround) : base(client) { EntityId = Data.WriteVarInt(entityId); Yaw = Data.WriteAngle(yaw); Pitch = Data.WriteAngle(pitch); OnGround = Data.WriteBoolean(onGround); }
public override void HandlePacket(MinecraftServer server, MinecraftClient client) { switch (Action) { case EntityAction.Crouch: client.IsCrouching = true; break; case EntityAction.Uncrouch: client.IsCrouching = false; break; case EntityAction.StartSprinting: client.IsSprinting = true; break; case EntityAction.StopSprinting: client.IsSprinting = false; break; case EntityAction.LeaveBed: client.Entity.LeaveBed(); break; } if (Action != EntityAction.LeaveBed) // NOTE: Does this matter? { // TODO ? } }
public override void SendPacket(MinecraftServer server, MinecraftClient client) { client.SendData(CreateBuffer( DataUtility.CreateString(PlayerName), DataUtility.CreateBoolean(Online), DataUtility.CreateInt16(Ping))); }
public override void SendPacket(MinecraftServer server, MinecraftClient client) { byte[] payload = new byte[] { PacketId } .Concat(DataUtility.CreateInt32(EntityId)) .Concat(new byte[] { (byte)DeltaX, (byte)DeltaY, (byte)DeltaZ }).ToArray(); client.SendData(payload); }
public static void BlockChange(MinecraftClient client, IPacket _packet) { var packet = (BlockChangePacket)_packet; var position = new Coordinates3D(packet.X, packet.Y, packet.Z); client.World.SetBlockId(position, (short)packet.BlockType); client.World.SetMetadata(position, packet.BlockMetadata); }
private void ClientForm_Load(object sender, EventArgs e) { Client = new MinecraftClient(Program.Session); Client.ChatMessage += Client_ChatMessage; Client.LoggedIn += Client_LoggedIn; Client.Connect(EndPoint); }
public override void SendPacket(MinecraftServer server, MinecraftClient client) { client.SendData(CreateBuffer( DataUtility.CreateInt32((int)SpawnPosition.X), DataUtility.CreateInt32((int)SpawnPosition.Y), DataUtility.CreateInt32((int)SpawnPosition.Z))); }
public override void SendPacket(MinecraftServer server, MinecraftClient client) { byte[] payload = new byte[] { PacketId, (byte)EntityIds.Length }; foreach (int id in EntityIds) payload = payload.Concat(DataUtility.CreateInt32(id)).ToArray(); client.SendData(payload); }
public static void ClientStatus(MinecraftClient client, MinecraftServer server, IPacket _packet) { var packet = (ClientStatusPacket)_packet; if (packet.Status == ClientStatusPacket.ClientStatus.InitialSpawn) { // Create a hash for session verification SHA1 sha1 = SHA1.Create(); AsnKeyBuilder.AsnMessage encodedKey = AsnKeyBuilder.PublicKeyToX509(server.ServerKey); byte[] shaData = Encoding.UTF8.GetBytes(client.AuthenticationHash) .Concat(client.SharedKey) .Concat(encodedKey.GetBytes()).ToArray(); string hash = Cryptography.JavaHexDigest(shaData); // Talk to session.minecraft.net if (server.Settings.OnlineMode) { var webClient = new WebClient(); var webReader = new StreamReader(webClient.OpenRead( new Uri(string.Format(sessionCheckUri, client.Username, hash)))); string response = webReader.ReadToEnd(); webReader.Close(); if (response != "YES") { client.SendPacket(new DisconnectPacket("Failed to verify username!")); return; } } server.LogInPlayer(client); } else if (packet.Status == ClientStatusPacket.ClientStatus.Respawn) { // TODO } }
public override void SendPacket(MinecraftServer server, MinecraftClient client) { byte[] payload = new byte[] { PacketId, WindowId } .Concat(DataUtility.CreateInt16(Index)) .Concat(Slot.GetData()).ToArray(); client.SendData(payload); }
public override void SendPacket(MinecraftServer server, MinecraftClient client) { // TODO: Refactor like mad var buffer = new List<byte>(); buffer.Add(PacketId); buffer.AddRange(DataUtility.CreateInt32(Item.Id)); if (Item.Item.Empty) buffer.AddRange(DataUtility.CreateInt16(-1)); else { buffer.AddRange(DataUtility.CreateInt16((short)Item.Item.Id)); // TODO: Make slots use signed shorts buffer.Add(Item.Item.Count); buffer.AddRange(DataUtility.CreateInt16((short)Item.Item.Metadata)); buffer.AddRange(DataUtility.CreateInt16(-1)); // TODO: Nbt appears to be sent here } buffer.AddRange(DataUtility.CreateAbsoluteInteger(Item.Position.X)); buffer.AddRange(DataUtility.CreateAbsoluteInteger(Item.Position.Y)); buffer.AddRange(DataUtility.CreateAbsoluteInteger(Item.Position.Z)); buffer.AddRange(DataUtility.CreatePackedByte(Item.Pitch)); buffer.AddRange(DataUtility.CreatePackedByte(Item.Pitch)); buffer.AddRange(DataUtility.CreatePackedByte(Item.Yaw)); client.SendData(buffer.ToArray()); }
public void Receive(ref MinecraftClient client, GameStream stream) { string username = stream.ReadString(); string idRequest = new WebClient().DownloadString(PlayerDatabase.uuidRetrieval + username).Trim(); UniqueIdRequest request = JsonConvert.DeserializeObject <UniqueIdRequest>(idRequest); for (int x = 0; x < PlayerDatabase.Players.Count; x++) { Player player = PlayerDatabase.Players[x]; if (player.UniqueId.toString().Remove('-') == request.UniqueId) { player.Username = username; // Make sure username is updated PlayerDatabase.Players.RemoveAt(x); PlayerDatabase.Players.Add(player); PlayerDatabase.Save(); } } Logger.Log($"{username} is trying to connect. ({request.UniqueId})"); if (!Config.EnableEncryption) { new LoginSuccess(false).Send(ref client, stream); } else { new EncryptionRequest().Send(ref client, stream); } }
public static void KeepAlive(MinecraftClient client, MinecraftServer server, IPacket _packet) { var packet = (KeepAlivePacket)_packet; // TODO: Confirm value validity client.LastKeepAlive = DateTime.Now; client.Ping = (short)(client.LastKeepAlive - client.LastKeepAliveSent).TotalMilliseconds; }
public override void SendPacket(MinecraftServer server, MinecraftClient client) { client.SendData(CreateBuffer( DataUtility.CreateInt32(EntityId), DataUtility.CreateInt16(SlotIndex), Item.GetData())); }
public override void SendPacket(MinecraftServer server, MinecraftClient client) { byte[] data = new byte[] {PacketId} .Concat(DataUtility.CreateInt32(EntityId)) .Concat(new byte[] {(byte)Animation}).ToArray(); client.SendData(data); }
public override void HandlePacket(MinecraftServer Server, ref MinecraftClient Client) { if (!Client.ReadyToSpawn) return; Client.Entity.Pitch = Pitch; Client.Entity.Yaw = Yaw; }
public CP12PlayerPosition(MinecraftClient client, Stream stream) : base(client, stream) { X = Data.ReadDouble(); FeetY = Data.ReadDouble(); Z = Data.ReadDouble(); OnGround = Data.ReadBoolean(); }
public SP20ChunkData(MinecraftClient client, int chunkX, int chunkZ, bool fullChunk, int primaryBitMask, TagCompound heightmaps, int[] biomes, sbyte[] data, TagCompound[] blockEntities) : base(client) { ChunkX = base.Data.WriteInt(chunkX); ChunkZ = base.Data.WriteInt(chunkZ); FullChunk = base.Data.WriteBoolean(fullChunk); PrimaryBitMask = base.Data.WriteVarInt(primaryBitMask); Heightmaps = base.Data.WriteNBT(new NBTFile(heightmaps)).Root; if (fullChunk) { base.Data.WriteVarInt(biomes.Length); Biomes = base.Data.WriteArray <int, VarInt>(biomes); } base.Data.WriteVarInt(data.Length); Data = base.Data.WriteByteArray(data); base.Data.WriteVarInt(blockEntities.Length); BlockEntities = blockEntities; for (int i = 0; i < blockEntities.Length; i++) { base.Data.WriteNBT(new NBTFile(blockEntities[i])); } }
public static void Respawn(MinecraftClient client, IPacket _packet) { var packet = (RespawnPacket)_packet; // TODO: Dimension change client.IsSpawned = false; }
public override void SendPacket(MinecraftServer server, MinecraftClient client) { client.SendData(CreateBuffer( new[] {WindowId}, DataUtility.CreateInt16(Index), Slot.GetData())); }
public override void HandlePacket(MinecraftServer server, MinecraftClient client) { var target = server.EntityManager.GetEntity(TargetId); if (target == null || server.EntityManager.GetEntityWorld(target) != server.EntityManager.GetEntityWorld(client.Entity) || target.Position.DistanceTo(client.Entity.Position) > client.Reach) return; if (target is LivingEntity) { // Do damage if (LeftClick) { var livingEntity = target as LivingEntity; if (livingEntity.Invulnerable) return; var item = client.Entity.SelectedItem.Item; if (item == null) item = new AirBlock(); client.Entity.FoodExhaustion += 0.3f; livingEntity.Damage(item.AttackDamage); livingEntity.Velocity /*+*/= DataUtility.RotateY(new Vector3(0, 0, client.Entity.IsSprinting ? 10 : 3), // TODO: Knockback enchantment DataUtility.DegreesToRadians(client.Entity.Yaw)); if (livingEntity is PlayerEntity) { (livingEntity as PlayerEntity).LastDamageType = DamageType.Combat; (livingEntity as PlayerEntity).LastAttackingEntity = client.Entity; } // TODO: Physics } } }
public static void EncryptionKeyResponse(MinecraftClient client, IPacket _packet) { // Enable encryption client.Stream = new MinecraftStream(new AesStream(new BufferedStream(client.NetworkStream), client.SharedSecret)); client.SendPacket(new ClientStatusPacket(ClientStatusPacket.ClientStatus.InitialSpawn)); LogProvider.Log("Logged in."); }
/// <summary> /// update gamemode /// </summary> public SP32PlayerInfo(MinecraftClient client, UUID uuid, Gamemode gamemode) : base(client) { Action = Data.WriteVarInt(1); Data.WriteVarInt(1); Uuid = Data.WriteUuid(uuid); Gamemode = (Gamemode)Data.WriteVarInt((int)gamemode); }
public static void Handshake(MinecraftClient client, MinecraftServer server, IPacket _packet) { var packet = (HandshakePacket)_packet; if (packet.ProtocolVersion < PacketReader.ProtocolVersion) { client.SendPacket(new DisconnectPacket("Outdated client!")); return; } if (packet.ProtocolVersion > PacketReader.ProtocolVersion) { client.SendPacket(new DisconnectPacket("Outdated server!")); return; } if (server.Clients.Any(c => c.Username == packet.Username)) { client.SendPacket(new DisconnectPacket("")); return; } client.Username = packet.Username; client.Hostname = packet.ServerHostname + ":" + packet.ServerPort; if (server.Settings.OnlineMode) client.AuthenticationHash = CreateHash(); else client.AuthenticationHash = "-"; if (server.Settings.EnableEncryption) client.SendPacket(CreateEncryptionRequest(client, server)); else server.LogInPlayer(client); }
/// <summary> /// update ping /// </summary> public SP32PlayerInfo(MinecraftClient client, UUID uuid, int ping) : base(client) { Action = Data.WriteVarInt(2); Data.WriteVarInt(1); Uuid = Data.WriteUuid(uuid); Ping = Data.WriteVarInt(ping); }
private static void AddChunk(MinecraftClient client, int x, int z, ushort primaryBitMap, ushort addBitMap, bool lightIncluded, bool groundUp, byte[] data) { var coordinates = new Coordinates2D(x, z); var relativePosition = GetRelativeChunkPosition(coordinates); var chunk = new Chunk(relativePosition); var sectionCount = GetSectionCount(primaryBitMap); // Run through the sections // TODO: Support block IDs >255 for (int y = 0; y < 16; y++) { if ((primaryBitMap & (1 << y)) > 0) { // Blocks Array.Copy(data, y * BlockDataLength, chunk.Sections[y].Blocks, 0, BlockDataLength); // Metadata Array.Copy(data, (BlockDataLength * sectionCount) + (y * NibbleDataLength), chunk.Sections[y].Metadata.Data, 0, NibbleDataLength); // Light Array.Copy(data, ((BlockDataLength + NibbleDataLength) * sectionCount) + (y * NibbleDataLength), chunk.Sections[y].BlockLight.Data, 0, NibbleDataLength); // Sky light if (lightIncluded) { Array.Copy(data, ((BlockDataLength + NibbleDataLength + NibbleDataLength) * sectionCount) + (y * NibbleDataLength), chunk.Sections[y].SkyLight.Data, 0, NibbleDataLength); } } } if (groundUp) Array.Copy(data, data.Length - chunk.Biomes.Length, chunk.Biomes, 0, chunk.Biomes.Length); client.World.SetChunk(coordinates, chunk); //client.OnChunkRecieved(new ChunkRecievedEventArgs(position, new ReadOnlyChunk(chunk))); }
public SP07AcknowledgePlayerDigging(MinecraftClient client, Position.Int location, int block, ActionType status, bool successful) : base(client) { Location = Data.WritePosition(location); Block = Data.WriteVarInt(block); Status = (ActionType)Data.WriteVarInt((int)status); Successful = Data.WriteBoolean(successful); }
public override void SendPacket(MinecraftServer server, MinecraftClient client) { client.SendData(CreateBuffer( DataUtility.CreateString(Channel), DataUtility.CreateInt16((short)Message.Length), Message)); }
public override void SendPacket(MinecraftServer server, MinecraftClient client) { client.SendData(CreateBuffer( DataUtility.CreateInt16(Health), DataUtility.CreateInt16(Food), DataUtility.CreateFloat(FoodSaturation))); }
public override void Execute(Server server, MinecraftClient user, string text, params string[] parameters) { if (parameters.Length != 1) { user.SendChat(ChatColors.Red + "Incorrect usage. Use /help difficulty for more information."); return; } Difficulty value; int num; if (int.TryParse(text, out num)) { if (num < 0 || num > 3) { user.SendChat(ChatColors.Red + "Invalid difficulty specified."); return; } value = (Difficulty)num; } else { if (!Enum.TryParse <Difficulty>(text, true, out value)) { user.SendChat(ChatColors.Red + "Invalid difficulty specified."); return; } } server.MinecraftServer.GetLevel(user.World).Difficulty = value; server.SendChatToGroup("server.op", ChatColors.Gray + user.Username + " sets difficulty of " + user.World.Name + " to " + value.ToString()); }
public override void HandlePacket(MinecraftServer Server, ref MinecraftClient Client) { switch (Action) { case EntityAction.Crouch: Client.IsCrouching = true; break; case EntityAction.Uncrouch: Client.IsCrouching = false; break; case EntityAction.StartSprinting: Client.IsSprinting = true; break; case EntityAction.StopSprinting: Client.IsSprinting = false; break; } if (Action != EntityAction.LeaveBed) // NOTE: Does this matter? { this.EntityId = Client.Entity.Id; for (int i = 0; i < Server.GetClientsInWorld(Server.GetClientWorld(Client)).Count(); i++) { if (Server.Clients [i] != Client) Server.Clients [i].SendPacket(this); } Server.ProcessSendQueue(); } }
public override void SendPacket(MinecraftServer server, MinecraftClient client) { if (Entity.Data != 0) { client.SendData(CreateBuffer( DataUtility.CreateInt32(Entity.Id), new[] { Entity.EntityType }, DataUtility.CreateAbsoluteInteger(Entity.Position.X), DataUtility.CreateAbsoluteInteger(Entity.Position.Y), DataUtility.CreateAbsoluteInteger(Entity.Position.Z), DataUtility.CreateInt32(Entity.Data), DataUtility.CreateInt16((short)Entity.Velocity.X), DataUtility.CreateInt16((short)Entity.Velocity.Y), DataUtility.CreateInt16((short)Entity.Velocity.Z))); } else { client.SendData(CreateBuffer( DataUtility.CreateInt32(Entity.Id), new[] { Entity.EntityType }, DataUtility.CreateAbsoluteInteger(Entity.Position.X), DataUtility.CreateAbsoluteInteger(Entity.Position.Y), DataUtility.CreateAbsoluteInteger(Entity.Position.Z), DataUtility.CreateInt32(Entity.Data))); } }
public static void Main(string[] args) { var endPoint = ParseEndPoint(args[0]); var ping = ServerPing.DoPing(endPoint); Console.WriteLine("{0}/{1} {2} ({3}): {4} [{5}ms latency]", ping.Players.OnlinePlayers, ping.Players.MaxPlayers, ping.Version.Name, ping.Version.ProtocolVersion, ping.Description, (int)ping.Latency.TotalMilliseconds); Console.WriteLine("Player list sample:"); if (ping.Players.Players != null) { foreach (var player in ping.Players.Players) { Console.WriteLine("{0} ({1})", player.Name, player.Id); } } if (!string.IsNullOrEmpty(ping.Icon)) { Console.WriteLine("Server icon: {0}", ping.Icon); } //var lastLogin = LastLogin.GetLastLogin(); //var session = Session.DoLogin(lastLogin.Username, lastLogin.Password); var session = new Session("TestBot"); // Connect to server var client = new MinecraftClient(session); client.Connect(endPoint); client.ChatMessage += (sender, e) => Console.WriteLine(e.Message); string command; do { command = Console.ReadLine(); if (command == null) { continue; // MonoDevelop debugger does this sometimes } if (command.StartsWith("say ")) { client.SendChat(command.Substring(4)); } if (command == "detect") { var coordinates = new Coordinates3D((int)client.Position.X, (int)client.Position.Y - 1, (int)client.Position.Z); Console.WriteLine("Looking up " + coordinates); var id = client.World.GetBlockId(coordinates); Console.WriteLine("Block ID: " + id); } } while (command != "quit"); client.Disconnect("Quitting"); }
public static void LoginRequest(MinecraftClient client, IPacket _packet) { var packet = (LoginRequestPacket)_packet; client.EntityId = packet.EntityId; client.IsLoggedIn = true; client.World = new ReadOnlyWorld(); client.OnLoggedIn(); }
public SL01EncryptionRequest(MinecraftClient client, string serverId, sbyte[] publicKey, sbyte[] verifyToken) : base(client) { ServerId = Data.WriteString(serverId); Data.WriteVarInt(publicKey.Length); PublicKey = Data.WriteByteArray(publicKey); Data.WriteVarInt(verifyToken.Length); VerifyToken = Data.WriteByteArray(verifyToken); }
public MinecraftPacket(MinecraftClient client) { Client = client; PacketAttribute attribute = GetType().GetCustomAttribute <PacketAttribute>(false); Id = attribute.Id; Data = new MinecraftStream((RecyclableMemoryStream)RMSManager.Get().GetStream(GetType().FullName)); }
public void Receive(ref MinecraftClient client, GameStream stream) { long pingReceived = stream.ReadLong(); var packet = new Pong(pingReceived); packet.Send(ref client, stream); client.Client.Close(); // Ensure to close so that the client can keep pinging }
public override void HandlePacket(MinecraftServer Server, ref MinecraftClient Client) { Client.ChatMode = this.ChatMode; Client.Locale = this.Locale; Client.MaxViewDistance = this.ViewDistance; Client.ColorsEnabled = this.ColorsEnabled; // Difficulty is discarded }
public override void HandlePacket(MinecraftServer server, MinecraftClient client) { LogProvider.Log("<" + client.Username + "> " + Message, LogImportance.Medium); var args = new ChatMessageEventArgs(client, Message); server.OnChatMessage(args); if (!args.Handled) server.SendChat("<" + client.Username + "> " + Message); }