Beispiel #1
0
		public override MetadataDictionary GetMetadata()
		{
			MetadataDictionary metadata = new MetadataDictionary();
			metadata[16] = new MetadataByte(Fuse);

			return metadata;
		}
Beispiel #2
0
		public virtual MetadataDictionary GetMetadata()
		{
			MetadataDictionary metadata = new MetadataDictionary();
			metadata[0] = new MetadataByte((byte) (HealthManager.IsOnFire ? 1 : 0));
			metadata[1] = new MetadataShort(HealthManager.Air);
			metadata[2] = new MetadataString(NameTag ?? string.Empty);
			metadata[3] = new MetadataByte(1);
			metadata[4] = new MetadataByte(0);
			metadata[15] = new MetadataByte(0);
			//metadata[16] = new MetadataByte(0);

			return metadata;
		}
Beispiel #3
0
		public override MetadataDictionary GetMetadata()
		{
			MetadataDictionary metadata = new MetadataDictionary();
			metadata[0] = new MetadataByte((byte) (HealthManager.IsOnFire ? 1 : 0));
			metadata[1] = new MetadataShort(HealthManager.Air);
			metadata[2] = new MetadataString(NameTag ?? Name);
			metadata[3] = new MetadataByte(!HideNameTag);
			metadata[4] = new MetadataByte(Silent);
			metadata[7] = new MetadataInt(0); // Potion Color
			metadata[8] = new MetadataByte(0); // Potion Ambient
			metadata[15] = new MetadataByte(NoAi);
			metadata[16] = new MetadataByte(0); // Player flags
			//metadata[17] = new MetadataIntCoordinates(0, 0, 0);

			return metadata;
		}
Beispiel #4
0
        public static MetadataDictionary FromStream(BinaryReader stream)
        {
            MetadataDictionary metadata = new MetadataDictionary();
            while (true)
            {
                byte key = stream.ReadByte();
                if (key == 0x7F) break;

                byte type = (byte) ((key & 0xE0) >> 5);
                byte index = (byte) (key & 0x1F);

                var entry = EntryTypes[type]();
                //if (index == 17 && type != 6)
                //{
                //	entry = new MetadataLong {id = type};
                //}

                entry.FromStream(stream);
                entry.Index = index;

                metadata[index] = entry;
            }
            return metadata;
        }
Beispiel #5
0
        public static MetadataDictionary FromStream(BinaryReader stream)
        {
            var value = new MetadataDictionary();
            while (true)
            {
                byte key = stream.ReadByte();
                if (key == 127) break;

                byte type = (byte) ((key & 0xE0) >> 5);
                byte index = (byte) (key & 0x1F);

                var entry = EntryTypes[type]();
                if (index == 17)
                {
                    entry = new MetadataLong {id = type};
                }

                entry.FromStream(stream);
                entry.Index = index;

                value[index] = entry;
            }
            return value;
        }
Beispiel #6
0
		public void Write(MetadataDictionary metadata)
		{
			if (metadata != null)
			{
				metadata.WriteTo(_writer);
			}
		}
Beispiel #7
0
		/// <summary>
		///     Handles the player action.
		/// </summary>
		/// <param name="message">The message.</param>
		protected virtual void HandlePlayerAction(McpePlayerAction message)
		{
			Log.DebugFormat("Player action: {0}", message.actionId);
			Log.DebugFormat("Entity ID: {0}", message.entityId);
			Log.DebugFormat("Action ID:  {0}", message.actionId);
			Log.DebugFormat("x:  {0}", message.x);
			Log.DebugFormat("y:  {0}", message.y);
			Log.DebugFormat("z:  {0}", message.z);
			Log.DebugFormat("Face:  {0}", message.face);

			switch ((PlayerAction) message.actionId)
			{
				case PlayerAction.StartBreak:
					break;
				case PlayerAction.AbortBreak:
					break;
				case PlayerAction.StopBreak:
					break;
				case PlayerAction.ReleaseItem:
					if (_itemUseTimer == null) return;

					Item itemInHand = Inventory.GetItemInHand().Item;

					if (itemInHand == null) return; // Cheat(?)

					_itemUseTimer.Stop();
					itemInHand.Release(Level, this, new BlockCoordinates(message.x, message.y, message.z), _itemUseTimer.ElapsedMilliseconds);

					_itemUseTimer = null;

					break;
				case PlayerAction.StopSleeping:
					break;
				case PlayerAction.Respawn:
					ThreadPool.QueueUserWorkItem(delegate(object state) { HandleRespawn(null); });
					break;
				case PlayerAction.Jump:
					break;
				case PlayerAction.StartSprint:
					IsSprinting = true;
					//Speed = 0.15f;
					//SendSetHealth();
					break;
				case PlayerAction.StopSprint:
					IsSprinting = false;
					Speed = 0.1f;
					SendSetHealth();
					break;
				case PlayerAction.StartSneak:
					IsSneaking = true;
					//SendSetHealth();
					break;
				case PlayerAction.StopSneak:
					IsSneaking = false;
					//SendSetHealth();
					break;
				case PlayerAction.DimensionChange:
					break;
				default:
					throw new ArgumentOutOfRangeException();
			}

			IsInAction = false;
			MetadataDictionary metadata = new MetadataDictionary
			{
				[0] = GetDataValue()
			};

			var setEntityData = McpeSetEntityData.CreateObject();
			setEntityData.entityId = EntityId;
			setEntityData.metadata = metadata;
			Level?.RelayBroadcast(this, setEntityData);
		}
Beispiel #8
0
		public override MetadataDictionary GetMetadata()
		{
			MetadataDictionary metadata = new MetadataDictionary();
			metadata[0] = new MetadataByte(GetDataValue());
			metadata[1] = new MetadataShort(HealthManager.Air);
			metadata[2] = new MetadataString("\u2764 \u2665 " + (NameTag ?? Username));
			metadata[3] = new MetadataByte(!HideNameTag);
			metadata[4] = new MetadataByte(Silent);
			metadata[7] = new MetadataInt(0); // Potion Color
			metadata[8] = new MetadataByte(0); // Potion Ambient
			metadata[15] = new MetadataByte(NoAi);
			metadata[16] = new MetadataByte(0); // Player flags
			metadata[17] = new MetadataIntCoordinates(0, 0, 0);

			return metadata;
		}
Beispiel #9
0
		protected virtual void HandleUseItem(McpeUseItem message)
		{
			//Log.DebugFormat("Use item: {0}", message.item.Value.Id);
			//Log.DebugFormat("item meta: {0}", message.item.Value.Metadata);
			//Log.DebugFormat("x:  {0}", message.x);
			//Log.DebugFormat("y:  {0}", message.y);
			//Log.DebugFormat("z:  {0}", message.z);
			//Log.DebugFormat("face:  {0}", message.face);
			//Log.DebugFormat("fx:  {0}", message.fx);
			//Log.DebugFormat("fy:  {0}", message.fy);
			//Log.DebugFormat("fz:  {0}", message.fz);
			//Log.DebugFormat("px:  {0}", message.positionX);
			//Log.DebugFormat("py:  {0}", message.positionY);
			//Log.DebugFormat("pz:  {0}", message.positionZ);

			if (message.face <= 5)
			{
				if (GameMode != GameMode.Creative)
				{
					ItemStack itemStack = message.item.Value;
					if (itemStack != null && !VerifyItemStack(itemStack))
					{
						Log.Error($"Kicked {Username} for use item hacking.");
						Disconnect("Error #324. Please report this error.");
						return;
					}
				}

				// Right click

				Vector3 faceCoords = new Vector3(message.fx, message.fy, message.fz);

				Level.Interact(Level, this, message.item.Value.Id, new BlockCoordinates(message.x, message.y, message.z), message.item.Value.Metadata, (BlockFace) message.face, faceCoords);
			}
			else
			{
				// Snowballs and shit

				_itemUseTimer = new Stopwatch();
				_itemUseTimer.Start();

				Level.Interact(Level, this, message.item.Value.Id, new BlockCoordinates(message.x, message.y, message.z), message.item.Value.Metadata);

				IsInAction = true;
				MetadataDictionary metadata = new MetadataDictionary
				{
					[0] = GetDataValue()
				};

				var setEntityData = McpeSetEntityData.CreateObject();
				setEntityData.entityId = EntityId;
				setEntityData.metadata = metadata;
				Level.RelayBroadcast(this, setEntityData);
			}
		}
Beispiel #10
0
        public static string MetadataToCode(MetadataDictionary metadata)
        {
            StringBuilder sb = new StringBuilder();

            sb.AppendLine();
            sb.AppendLine("MetadataDictionary metadata = new MetadataDictionary();");

            foreach (var kvp in metadata._entries)
            {
                int           idx   = kvp.Key;
                MetadataEntry entry = kvp.Value;

                sb.Append($"metadata[{idx}] = new ");
                switch (entry.Identifier)
                {
                case 0:
                {
                    var e = (MetadataByte)entry;
                    sb.Append($"{e.GetType().Name}({e.Value});");
                    break;
                }

                case 1:
                {
                    var e = (MetadataShort)entry;
                    sb.Append($"{e.GetType().Name}({e.Value});");
                    break;
                }

                case 2:
                {
                    var e = (MetadataInt)entry;
                    sb.Append($"{e.GetType().Name}({e.Value});");
                    break;
                }

                case 3:
                {
                    var e = (MetadataFloat)entry;
                    sb.Append($"{e.GetType().Name}({e.Value.ToString(NumberFormatInfo.InvariantInfo)}f);");
                    break;
                }

                case 4:
                {
                    var e = (MetadataString)entry;
                    sb.Append($"{e.GetType().Name}(\"{e.Value}\");");
                    break;
                }

                case 5:
                {
                    var e = (MetadataSlot)entry;
                    sb.Append($"{e.GetType().Name}({e.Value});");
                    break;
                }

                case 6:
                {
                    var e = (MetadataIntCoordinates)entry;
                    sb.Append($"{e.GetType().Name}({e.Value});");
                    break;
                }

                case 7:
                {
                    var e = (MetadataLong)entry;
                    sb.Append($"{e.GetType().Name}({e.Value});");
                    if (idx == 0)
                    {
                        sb.Append($" // {Convert.ToString(e.Value, 2)}");
                    }
                    break;
                }

                case 8:
                {
                    var e = (MetadataVector3)entry;
                    sb.Append($"{e.GetType().Name}({e.Value});");
                    break;
                }
                }
                sb.AppendLine();
            }

            return(sb.ToString());
        }
Beispiel #11
0
        protected virtual void HandleUseItem(McpeUseItem message)
        {
            Log.DebugFormat("Use item: {0}", message.item);
            Log.DebugFormat("Entity ID: {0}", message.entityId);
            Log.DebugFormat("meta:  {0}", message.meta);
            Log.DebugFormat("x:  {0}", message.x);
            Log.DebugFormat("y:  {0}", message.y);
            Log.DebugFormat("z:  {0}", message.z);
            Log.DebugFormat("face:  {0}", message.face);
            Log.DebugFormat("fx:  {0}", message.fx);
            Log.DebugFormat("fy:  {0}", message.fy);
            Log.DebugFormat("fz:  {0}", message.fz);
            Log.DebugFormat("px:  {0}", message.positionX);
            Log.DebugFormat("py:  {0}", message.positionY);
            Log.DebugFormat("pz:  {0}", message.positionZ);

            if (message.face <= 5)
            {
                Level.RelayBroadcast(this, new McpeAnimate()
                {
                    actionId = 1,
                    entityId = EntityId
                });

                Vector3 faceCoords = new Vector3(message.fx, message.fy, message.fz);

                Level.Interact(Level, this, message.item, new BlockCoordinates(message.x, message.y, message.z), message.meta, (BlockFace) message.face, faceCoords);
            }
            else
            {
                _itemUseTimer = new Stopwatch();
                _itemUseTimer.Start();
                // Snowballs and shit
                Level.Interact(Level, this, message.item, new BlockCoordinates(message.x, message.y, message.z), message.meta);

                MetadataDictionary metadata = new MetadataDictionary();
                metadata[0] = new MetadataByte(16);
                Level.RelayBroadcast(this, new McpeSetEntityData
                {
                    entityId = EntityId,
                    metadata = metadata,
                });
            }
        }
Beispiel #12
0
        /// <summary>
        ///     Handles the player action.
        /// </summary>
        /// <param name="message">The message.</param>
        protected virtual void HandlePlayerAction(McpePlayerAction message)
        {
            Log.DebugFormat("Player action: {0}", message.actionId);
            Log.DebugFormat("Entity ID: {0}", message.entityId);
            Log.DebugFormat("Action ID:  {0}", message.actionId);
            Log.DebugFormat("x:  {0}", message.x);
            Log.DebugFormat("y:  {0}", message.y);
            Log.DebugFormat("z:  {0}", message.z);
            Log.DebugFormat("Face:  {0}", message.face);

            switch (message.actionId)
            {
                case 5: // Shoot arrow
                {
                    if (_itemUseTimer == null) return;

                    Item itemInHand = Inventory.ItemInHand;

                    if (itemInHand == null) return; // Cheat(?)

                    _itemUseTimer.Stop();
                    itemInHand.Release(Level, this, new BlockCoordinates(message.x, message.y, message.z), _itemUseTimer.ElapsedMilliseconds);

                    _itemUseTimer = null;

                    MetadataDictionary metadata = new MetadataDictionary();
                    metadata[0] = new MetadataByte(0);
                    Level.RelayBroadcast(this, new McpeSetEntityData
                    {
                        entityId = EntityId,
                        metadata = metadata,
                    });

                    break;
                }
                case 7: // Respawn
                    ThreadPool.QueueUserWorkItem(delegate(object state) { HandleRespawn(null); });
                    break;
                default:
                    return;
            }
        }
Beispiel #13
0
        public override MetadataDictionary GetMetadata()
        {
            MetadataDictionary metadata = new MetadataDictionary();
            metadata[0] = new MetadataByte((byte) (HealthManager.IsOnFire ? 1 : 0));
            metadata[1] = new MetadataShort(HealthManager.Air);
            metadata[2] = new MetadataString(NameTag ?? Username);
            metadata[3] = new MetadataByte(1);
            metadata[4] = new MetadataByte(0);
            metadata[7] = new MetadataInt(0);
            metadata[8] = new MetadataByte(0);
            metadata[15] = new MetadataByte(0);
            metadata[16] = new MetadataByte(0);
            metadata[17] = new MetadataLong(0);

            return metadata;
        }
Beispiel #14
0
        /// <summary>
        ///     Handles the player action.
        /// </summary>
        /// <param name="message">The message.</param>
        private void HandlePlayerAction(McpePlayerAction message)
        {
            Log.DebugFormat("Player action: {0}", message.actionId);
            Log.DebugFormat("Entity ID: {0}", message.entityId);
            Log.DebugFormat("Action ID:  {0}", message.actionId);
            Log.DebugFormat("x:  {0}", message.x);
            Log.DebugFormat("y:  {0}", message.y);
            Log.DebugFormat("z:  {0}", message.z);
            Log.DebugFormat("face:  {0}", message.face);

            if (message.entityId != EntityId) return;

            switch (message.actionId)
            {
                case 5: // Shoot arrow
                {
                    if (_itemUseTimer == null) return;

                    MetadataSlot itemSlot = Inventory.ItemInHand;
                    Item itemInHand = ItemFactory.GetItem(itemSlot.Value.Id);

                    if (itemInHand == null) return; // Cheat(?)

                    _itemUseTimer.Stop();
                    itemInHand.Release(Level, this, new BlockCoordinates(message.x, message.y, message.z), _itemUseTimer.ElapsedMilliseconds);

                    _itemUseTimer = null;

                    MetadataDictionary metadata = new MetadataDictionary();
                    metadata[0] = new MetadataByte(0);
                    Level.RelayBroadcast(this, new McpeSetEntityData
                    {
                        entityId = EntityId,
                        metadata = metadata,
                    });

                    break;
                }
                case 7: // Respawn
                    HandleRespawn(null);
                    break;
                default:
                    return;
            }
        }
Beispiel #15
0
        public override MetadataDictionary GetMetadata()
        {
            //[0] byte 0 0,
            //[1] short 1 300,
            //[2] string 4 Client12,
            //[3] byte 0 1,
            //[4] byte 0 0,
            //[7] int 2 0,
            //[8] byte 0 0,
            //[15] byte 0 0,
            //[16] byte 0 0,
            //[17] long 6 0

            MetadataDictionary metadata = new MetadataDictionary();
            metadata[0] = new MetadataByte((byte) (HealthManager.IsOnFire ? 1 : 0));
            metadata[1] = new MetadataShort(HealthManager.Air);
            metadata[2] = new MetadataString(Username);
            metadata[3] = new MetadataByte(1);
            metadata[4] = new MetadataByte(0);
            metadata[7] = new MetadataInt(0);
            metadata[8] = new MetadataByte(0);
            metadata[15] = new MetadataByte(0);
            metadata[16] = new MetadataByte(0);
            metadata[17] = new MetadataLong(0);

            return metadata;
        }