public NetworkHandler(MinecraftClient mc) { _mainMc = mc; LoginHandlers = new PacketHandler[3]; PlayHandlers = new PacketHandler[65]; StatusHandlers = new PacketHandler[2]; PopulateLists(); }
static void Main(string[] args) { var MinecraftServer = new MinecraftClient(args[0], int.Parse(args[1]), "USERNAME HERE", "PASSWORD HERE", true); MinecraftServer.ServerState = 2; MinecraftServer.Message += (sender, message, name) => { Console.WriteLine("<" + name + "> " + message); }; //MinecraftServer.DebugMessage += (sender, message) => { // Console.WriteLine("[DEBUG][" + sender.ToString() + "] " + message); //}; MinecraftServer.LoginFailure += (sender, message) => { Console.WriteLine("Login Error: " + message); }; MinecraftServer.ErrorMessage += (sender, message) => { Console.WriteLine("[ERROR][" + sender.ToString() + "] " + message); }; MinecraftServer.InfoMessage += (sender, message) => { Console.WriteLine("[INFO][" + sender.ToString() + "] " + message); }; MinecraftServer.PlayerRespawned += () => { Console.WriteLine("[Info] You respawned!"); }; if (MinecraftServer.VerifyNames) MinecraftServer.Login(); MinecraftServer.Connect(); string command; do { command = Console.ReadLine(); if (command.StartsWith("say ")) MinecraftServer.SendChat(command.Substring(4)); if (command.StartsWith("respawn")) { MinecraftServer.Respawn(); } } while (command != "quit"); MinecraftServer.Disconnect(); Console.ReadKey(); }
public void HandleKeepAlive(MinecraftClient client, IPacket packet) { var KA = (CBKeepAlive)packet; var KAS = new SBKeepAlive(); KAS.KeepAliveID = KA.KeepAliveID; KAS.Write(client.nh.wSock); }
static void Main(string[] args) { string serverIp = "127.0.0.1"; int serverPort = 25565; string userName = "******"; string userPassword = null; OptionSet p = new OptionSet () .Add ("ip=", v => serverIp = v) .Add ("port=", v => int.Parse (v)) .Add ("user="******"pass", v => userPassword = ReadPassword()); p.Parse (args); var MinecraftServer = new MinecraftClient(serverIp, serverPort, userName, userPassword, !String.IsNullOrWhiteSpace(userPassword)); MinecraftServer.ServerState = 2; MinecraftServer.Message += (sender, message, name) => { Console.WriteLine("<" + name + "> " + message); }; //MinecraftServer.DebugMessage += (sender, message) => { // Console.WriteLine("[DEBUG][" + sender.ToString() + "] " + message); //}; MinecraftServer.LoginFailure += (sender, message) => { Console.WriteLine("Login Error: " + message); }; MinecraftServer.ErrorMessage += (sender, message) => { Console.WriteLine("[ERROR][" + sender.ToString() + "] " + message); }; MinecraftServer.InfoMessage += (sender, message) => { Console.WriteLine("[INFO][" + sender.ToString() + "] " + message); }; MinecraftServer.PlayerRespawned += () => { Console.WriteLine("[Info] You respawned!"); }; if (MinecraftServer.VerifyNames) MinecraftServer.Login(); MinecraftServer.Connect(); string command; do { command = Console.ReadLine(); if (command.StartsWith("say ")) MinecraftServer.SendChat(command.Substring(4)); if (command.StartsWith("respawn")) { MinecraftServer.Respawn(); } } while (command != "quit"); MinecraftServer.Disconnect(); Console.ReadKey(); }
public void HandleEntityHeadLook(MinecraftClient client, IPacket packet) { var myPacket = (CBEntityHeadLook)packet; if (client.MinecraftWorld != null) { int eIndex = client.MinecraftWorld.GetEntityById(myPacket.EntityID); if (eIndex != -1) client.MinecraftWorld.Entities[eIndex].headPitch = myPacket.HeadYaw; } client.RaiseEntityHeadLookChanged(myPacket.EntityID, myPacket.HeadYaw); }
public void HandlePlayerPositionAndLook(MinecraftClient client, IPacket packet) { var myPacket = (CBPlayerPositionAndLook)packet; if (client.ThisPlayer == null) client.ThisPlayer = new Player(); client.ThisPlayer.location.x = myPacket.X; client.ThisPlayer.location.y = myPacket.Y; client.ThisPlayer.location.z = myPacket.Z; client.ThisPlayer.look[0] = myPacket.Yaw; client.ThisPlayer.look[1] = myPacket.Pitch; client.ThisPlayer.onGround = myPacket.OnGround; client.RaiseLocationChanged(); var sending = new SBPlayerPositionAndLook(); sending.X = client.ThisPlayer.location.x; sending.FeetY = client.ThisPlayer.location.y - 1.620; sending.HeadY = client.ThisPlayer.location.y; sending.Z = client.ThisPlayer.location.z; sending.Yaw = client.ThisPlayer.look[0]; sending.Pitch = client.ThisPlayer.look[1]; sending.OnGround = client.ThisPlayer.onGround; sending.Write(client.nh.wSock); }
public void HandleRemoveEntityEffect(MinecraftClient client, IPacket packet) { var myPacket = (CBRemoveEntityEffect)packet; if (client.MinecraftWorld != null) { int eIndex = client.MinecraftWorld.GetEntityById(myPacket.EntityID); if (eIndex != -1) { client.MinecraftWorld.Entities[eIndex].status = myPacket.EffectID; client.RaiseEntityStatus(myPacket.EntityID); } } }
public void HandleMultiBlockChange(MinecraftClient client, IPacket packet) { var myPacket = (CBMultiBlockChange)packet; int chunkID = client.MinecraftWorld.GetChunk(myPacket.ChunkX, myPacket.ChunkZ); if (chunkID == -1) { client.RaiseError(this, "Attempted to access uninitialized chunk"); return; } var thisChunk = client.MinecraftWorld.worldChunks[chunkID]; for (int i = 0; i < myPacket.Recordcount - 1; i++) { var thisRecord = myPacket.Records[i]; thisChunk.UpdateBlock(thisRecord.X, thisRecord.Y, thisRecord.Z, thisRecord.BlockID); thisChunk.SetBlockData(thisRecord.X, thisRecord.Y, thisRecord.Z, thisRecord.Metadata); } client.RaiseMultiBlockChange(myPacket.ChunkX, myPacket.ChunkX); }
//TODO: Particle public void HandlePlayerAbilities(MinecraftClient client, IPacket packet) { var myPacket = (CBPlayerAbilities)packet; client.ThisPlayer.flyingSpeed = myPacket.Flyingspeed; client.ThisPlayer.WalkingSpeed = myPacket.Walkingspeed; }
public void HandleEntityRelMove(MinecraftClient client, IPacket packet) { var myPacket = (CBEntityRelativeMove)packet; if (client.MinecraftWorld != null) { int eIndex = client.MinecraftWorld.GetEntityById(myPacket.EntityID); if (eIndex != -1) { client.MinecraftWorld.Entities[eIndex].Location.x += (myPacket.DX * 32); client.MinecraftWorld.Entities[eIndex].Location.y += (myPacket.DY * 32); client.MinecraftWorld.Entities[eIndex].Location.z += (myPacket.DZ * 32); } } client.RaiseEntityRelMove(myPacket.EntityID, myPacket.DX, myPacket.DY, myPacket.DZ); }
public void HandleEntityStatus(MinecraftClient client, IPacket packet) { var myPacket = (CBEntityStatus)packet; if (client.MinecraftWorld != null) { int eIndex = client.MinecraftWorld.GetEntityById(myPacket.EntityID); if (eIndex != -1) client.MinecraftWorld.Entities[eIndex].status = myPacket.EntityStatus; } client.RaiseEntityStatus(myPacket.EntityID); }
public void HandleEntityMetadata(MinecraftClient client, IPacket packet) { //TODO: // -- This needs to be written }
public void HandleEntityProperties(MinecraftClient client, IPacket packet) { var myPacket = (CBEntityProperties)packet; //TODO: This }
public void HandleLookEntityRelMove(MinecraftClient client, IPacket packet) { var myPacket = (CBEntityLookandRelativeMove)packet; if (client.MinecraftWorld != null) { int eIndex = client.MinecraftWorld.GetEntityById(myPacket.EntityID); if (eIndex != -1) { client.MinecraftWorld.Entities[eIndex].Location.x += (myPacket.DX * 32); client.MinecraftWorld.Entities[eIndex].Location.y += (myPacket.DY * 32); client.MinecraftWorld.Entities[eIndex].Location.z += (myPacket.DZ * 32); client.MinecraftWorld.Entities[eIndex].yaw = myPacket.Yaw; client.MinecraftWorld.Entities[eIndex].pitch = myPacket.Pitch; } } client.RaiseEntityRelMove(myPacket.EntityID, myPacket.DX * 32, myPacket.DY * 32, myPacket.DZ * 32); client.RaiseEntityLookChanged(myPacket.EntityID, myPacket.Yaw, myPacket.Pitch); }
public void HandleEntityLook(MinecraftClient client, IPacket packet) { var myPacket = (CBEntityLook)packet; if (client.MinecraftWorld != null) { int eIndex = client.MinecraftWorld.GetEntityById(myPacket.EntityID); if (eIndex != -1) { client.MinecraftWorld.Entities[eIndex].pitch = myPacket.Pitch; client.MinecraftWorld.Entities[eIndex].yaw = myPacket.Yaw; } } client.RaiseEntityLookChanged(myPacket.EntityID, myPacket.Yaw, myPacket.Pitch); }
public void HandleLoginDisconnect(MinecraftClient client, IPacket packet) { var Disconnect = (CBLoginDisconnect)packet; client.RaiseLoginFailure(this, Disconnect.JSONData); client.Disconnect(); }
public void HandleMapChunkBulk(MinecraftClient client, IPacket packet) { var ChunkPacket = (CBMapChunkBulk)packet; int Offset = 0; byte[] trim = new byte[ChunkPacket.Datalength - 2]; byte[] DecompressedData; Chunk[] chunks = new Chunk[ChunkPacket.Chunkcolumncount]; Buffer.BlockCopy(ChunkPacket.Data, 2, trim, 0, trim.Length); DecompressedData = Decompressor.Decompress(trim); for (int i = 0; ChunkPacket.Chunkcolumncount > i; i++) { int x = BitConverter.ToInt32(ChunkPacket.Metainformation, Offset); int z = BitConverter.ToInt32(ChunkPacket.Metainformation, Offset + 4); short pbitmap = ReverseBytes(BitConverter.ToInt16(ChunkPacket.Metainformation, Offset + 8)); short abitmap = ReverseBytes(BitConverter.ToInt16(ChunkPacket.Metainformation, Offset + 10)); Offset += 12; chunks[i] = new Chunk(x, z, pbitmap, abitmap, ChunkPacket.Skylightsent, true); // -- Assume true for Ground Up Continuous DecompressedData = chunks[i].GetData(DecompressedData); // -- Calls the chunk class to take all of the bytes it needs, and return whats left. if (client.MinecraftWorld == null) client.MinecraftWorld = new WorldClass(); client.MinecraftWorld.worldChunks.Add(chunks[i]); } }
public void HandleEncryptionRequest(MinecraftClient client, IPacket packet) { var ER = (CBEncryptionRequest)packet; var SharedKey = new byte[16]; var Random = RandomNumberGenerator.Create(); // -- Generate a random shared key. Random.GetBytes(SharedKey); if (ER.ServerID == "" && client.VerifyNames) { // -- Verify with Minecraft.net. // -- At this point, the server requires a hash containing the server id, // -- shared key, and original public key. So we make this, and then pass to Minecraft.net List<byte> HashList = new List<byte>(); HashList.AddRange(Encoding.ASCII.GetBytes(ER.ServerID)); HashList.AddRange(SharedKey); HashList.AddRange(ER.PublicKey); var HashData = HashList.ToArray(); var Hash = JavaHexDigest(HashData); var Verify = new Minecraft_Net_Interaction(); if (!Verify.VerifyName(client.ClientName, client.AccessToken, client.SelectedProfile, Hash)) { client.RaiseLoginFailure(this, "Failed to verify name with Minecraft session server."); client.Disconnect(); return; } } else client.RaiseInfo(this, "Name verification disabled, skipping authentication."); // -- AsnKeyParser is a part of the cryptography.dll, which is simply a compiled version // -- of SMProxy's Cryptography.cs, with the server side parts stripped out. // -- You pass it the key data and ask it to parse, and it will // -- Extract the server's public key, then parse that into RSA for us. var KeyParser = new AsnKeyParser(ER.PublicKey); var Dekey = KeyParser.ParseRSAPublicKey(); // -- Now we create an encrypter, and encrypt the token sent to us by the server // -- as well as our newly made shared key (Which can then only be decrypted with the server's private key) // -- and we send it to the server. var cryptoService = new RSACryptoServiceProvider(); // -- RSA Encryption class cryptoService.ImportParameters(Dekey); // -- Import the Server's public key to use as the RSA encryption key. byte[] EncryptedSecret = cryptoService.Encrypt(SharedKey, false); // -- Encrypt the Secret key and verification token. byte[] EncryptedVerify = cryptoService.Encrypt(ER.VerifyToken, false); client.nh.wSock.InitEncryption(SharedKey); // -- Give the shared secret key to the socket var Response = new SBEncryptionResponse(); // -- Respond to the server Response.SharedLength = (short)EncryptedSecret.Length; Response.SharedSecret = EncryptedSecret; Response.VerifyLength = (short)EncryptedVerify.Length; Response.VerifyToken = EncryptedVerify; Response.Write(client.nh.wSock); client.nh.wSock.EncEnabled = true; client.nh.RaiseSocketInfo(this, "Encryption Enabled."); }
public void HandleMaps(MinecraftClient client, IPacket packet) { var myPacket = (CBMaps)packet; // -- Still don't know what this is for. }
public void HandleEntityTeleport(MinecraftClient client, IPacket packet) { var myPacket = (CBEntityTeleport)packet; if (client.MinecraftWorld != null) { int eIndex = client.MinecraftWorld.GetEntityById(myPacket.EntityID); if (eIndex != -1) { client.MinecraftWorld.Entities[eIndex].Location.x = myPacket.X; client.MinecraftWorld.Entities[eIndex].Location.y = myPacket.Y; client.MinecraftWorld.Entities[eIndex].Location.z = myPacket.Z; client.MinecraftWorld.Entities[eIndex].yaw = myPacket.Yaw; client.MinecraftWorld.Entities[eIndex].pitch = myPacket.Pitch; } } client.RaiseEntityTeleport(myPacket.EntityID, myPacket.X, myPacket.Y, myPacket.Z); client.RaiseEntityLookChanged(myPacket.EntityID, myPacket.Yaw, myPacket.Pitch); }
public void HandleOpenWindow(MinecraftClient client, IPacket packet) { var myPacket = (CBOpenWindow)packet; client.RaiseOpenWindow(myPacket.Windowid, myPacket.InventoryType, myPacket.Windowtitle, myPacket.NumberofSlots, myPacket.Useprovidedwindowtitle); client.RaiseDebug(this, "Window opened forcibly"); }
public void HandleEntityVelocity(MinecraftClient client, IPacket packet) { var myPacket = (CBEntityVelocity)packet; if (client.MinecraftWorld != null) { int eIndex = client.MinecraftWorld.GetEntityById(myPacket.EntityID); if (eIndex != -1) { client.MinecraftWorld.Entities[eIndex].Velocity_X = myPacket.VelocityX; client.MinecraftWorld.Entities[eIndex].Velocity_Y = myPacket.VelocityY; client.MinecraftWorld.Entities[eIndex].Velocity_Z = myPacket.VelocityZ; } } client.RaiseEntityVelocityChanged(myPacket.EntityID, myPacket.VelocityX, myPacket.VelocityY, myPacket.VelocityZ); }
public void HandlePlayerListItem(MinecraftClient client, IPacket packet) { var myPacket = (CBPlayerListItem)packet; if (myPacket.Online) { if (client.Players.ContainsKey(myPacket.Playername)) { client.Players[myPacket.Playername] = myPacket.Ping; client.RaisePlayerlistUpdate(myPacket.Playername, myPacket.Ping); } else { client.Players.Add(myPacket.Playername, myPacket.Ping); client.RaisePlayerlistAdd(myPacket.Playername, myPacket.Ping); } } else { if (client.Players.ContainsKey(myPacket.Playername)) { client.Players.Remove(myPacket.Playername); client.RaisePlayerlistRemove(myPacket.Playername); } } }
public void HandleEntityEffect(MinecraftClient client, IPacket packet) { var myPacket = (CBEntityEffect)packet; if (client.MinecraftWorld == null) return; int eIndex = client.MinecraftWorld.GetEntityById(myPacket.EntityID); if (eIndex != -1) { client.MinecraftWorld.Entities[eIndex].amplifier = myPacket.Amplifier; client.MinecraftWorld.Entities[eIndex].duration = myPacket.Duration; client.MinecraftWorld.Entities[eIndex].status = myPacket.EffectID; client.RaiseEntityStatus(myPacket.EntityID); } }
public void HandlePluginMessage(MinecraftClient client, IPacket packet) { var myPacket = (CBPluginMessage)packet; client.RaisePluginMessage(myPacket.Channel, myPacket.Data); }
public void HandleHeldItemChange(MinecraftClient client, IPacket packet) { var myPacket = (CBHeldItemChange)packet; if (client.ThisPlayer == null) client.ThisPlayer = new Player(); client.ThisPlayer.selectedSlot = myPacket.Slot; var mySend = new SBHeldItemChange(); mySend.Slot = client.ThisPlayer.selectedSlot; mySend.Write(client.nh.wSock); }
public TickHandler(ref MinecraftClient mc) { ThisMc = mc; }
public void HandleJoinGame(MinecraftClient client, IPacket packet) { var myPacket = (CBJoinGame)packet; if (client.ThisPlayer == null) client.ThisPlayer = new Player(); client.ThisPlayer.Entity_ID = myPacket.EntityID; client.ThisPlayer.gameMode = myPacket.Gamemode; if (client.MinecraftWorld == null) client.MinecraftWorld = new WorldClass(); client.MinecraftWorld.difficulty = myPacket.Difficulty; client.MinecraftWorld.dimension = myPacket.Dimension; client.MinecraftWorld.maxPlayers = myPacket.MaxPlayers; client.MinecraftWorld.levelType = myPacket.LevelType; client.RaiseDebug(this, string.Format("Entity ID: {0}", myPacket.EntityID)); client.RaiseGameJoined(); var b = new SBClientSettings(); b.Locale = "en_US"; b.Viewdistance = 5; b.Chatflags = 3; b.Chatcolours = true; b.Difficulty = 1; b.ShowCape = false; b.Write(client.nh.wSock); var c = new SBPluginMessage(); c.Channel = "MC|Brand"; c.Data = Encoding.UTF8.GetBytes(client.ClientBrand); c.Length = (short)c.Data.Length; c.Write(client.nh.wSock); }
public void HandleExplosion(MinecraftClient client, IPacket packet) { var myPacket = (CBExplosion)packet; //TODO: Handle more of this... client.RaiseExplosion(myPacket.X, myPacket.Y, myPacket.Z); }
public void HandleEntityEquipment(MinecraftClient client, IPacket packet) { var myPacket = (CBEntityEquipment)packet; if (client.ThisPlayer != null && myPacket.EntityID == client.ThisPlayer.Entity_ID) { client.ThisPlayer.SetInventory(Item.ItemFromSlot(myPacket.Item), myPacket.Slot); return; } if (client.MinecraftWorld != null && client.MinecraftWorld.Entities != null) { int eIndex = client.MinecraftWorld.GetEntityById(myPacket.EntityID); if (eIndex != -1) client.MinecraftWorld.Entities[eIndex].HandleInventory(myPacket.Slot, Item.ItemFromSlot(myPacket.Item)); } }