Exemplo n.º 1
0
        public override void Decode(MinecraftStream stream)
        {
            Action = (PlayerListAction)stream.ReadVarInt();
            int count = stream.ReadVarInt();

            if (Action == PlayerListAction.AddPlayer)
            {
                ReadAddPlayerEntries(count, stream);
                return;
            }

            if (Action == PlayerListAction.UpdateLatency)
            {
                ReadUpdateLatencyEntries(count, stream);
                return;
            }

            if (Action == PlayerListAction.RemovePlayer)
            {
                RemovePlayerEntries = new RemovePlayerEntry[count];
                for (int i = 0; i < RemovePlayerEntries.Length; i++)
                {
                    var entry = new RemovePlayerEntry();
                    entry.UUID             = stream.ReadUuid();
                    RemovePlayerEntries[i] = entry;
                }
            }

            if (Action == PlayerListAction.UpdateDisplayName)
            {
                ReadUpdateDisplayNameEntries(count, stream);
            }
        }
Exemplo n.º 2
0
        public override void Decode(MinecraftStream stream)
        {
            EntityId = stream.ReadVarInt();
            int count = stream.ReadInt();

            for (int i = 0; i < count; i++)
            {
                string key   = stream.ReadString();
                double value = stream.ReadDouble();

                int        propCount = stream.ReadVarInt();
                Modifier[] modifiers = new Modifier[propCount];

                for (int y = 0; y < modifiers.Length; y++)
                {
                    UUID         uuid   = new UUID(stream.ReadUuid().ToByteArray());
                    double       amount = stream.ReadDouble();
                    ModifierMode op     = (ModifierMode)stream.ReadByte();

                    modifiers[y] = EntityProperty.Factory.CreateModifier(uuid, amount, op);
                }

                EntityProperty prop = EntityProperty.Factory.Create(key, value, modifiers);

                if (!Properties.ContainsKey(prop.Key))
                {
                    Properties.Add(prop.Key, prop);
                }
            }
        }
Exemplo n.º 3
0
 public override void Decode(MinecraftStream stream)
 {
     Message = stream.ReadString();
     if (!ServerBound)
     {
         Position = (byte)stream.ReadByte();
         UUID     = stream.ReadUuid();
     }
 }
Exemplo n.º 4
0
 public override void Decode(MinecraftStream stream)
 {
     EntityId = stream.ReadVarInt();
     Uuid     = stream.ReadUuid();
     X        = stream.ReadDouble();
     Y        = stream.ReadDouble();
     Z        = stream.ReadDouble();
     Yaw      = (sbyte)stream.ReadByte();
     Pitch    = (sbyte)stream.ReadByte();
     stream.ReadByte();
 }
Exemplo n.º 5
0
        private void ReadUpdateLatencyEntries(int count, MinecraftStream stream)
        {
            UpdateLatencyEntries = new UpdateLatencyEntry[count];

            for (int i = 0; i < count; i++)
            {
                var entry = new UpdateLatencyEntry();
                entry.UUID = stream.ReadUuid();
                entry.Ping = stream.ReadVarInt();

                UpdateLatencyEntries[i] = entry;
            }
        }
Exemplo n.º 6
0
 public override void Decode(MinecraftStream stream)
 {
     EntityId  = stream.ReadVarInt();
     Uuid      = stream.ReadUuid();
     Type      = stream.ReadVarInt();
     X         = stream.ReadDouble();
     Y         = stream.ReadDouble();
     Z         = stream.ReadDouble();
     Yaw       = (byte)stream.ReadByte();
     Pitch     = (byte)stream.ReadByte();
     HeadPitch = (byte)stream.ReadByte();
     VelocityX = stream.ReadShort();
     VelocityY = stream.ReadShort();
     VelocityZ = stream.ReadShort();
 }
Exemplo n.º 7
0
        private void ReadUpdateDisplayNameEntries(int count, MinecraftStream stream)
        {
            UpdateDisplayNameEntries = new UpdateDisplayNameEntry[count];
            for (int i = 0; i < count; i++)
            {
                var entry = new UpdateDisplayNameEntry();
                entry.UUID           = stream.ReadUuid();
                entry.HasDisplayName = stream.ReadBool();
                if (entry.HasDisplayName)
                {
                    entry.DisplayName = stream.ReadString();
                }

                UpdateDisplayNameEntries[i] = entry;
            }
        }
Exemplo n.º 8
0
        public override void Decode(MinecraftStream stream)
        {
            EntityId = stream.ReadVarInt();
            int count = stream.ReadInt();

            for (int i = 0; i < count; i++)
            {
                Property prop  = new Property();
                string   key   = stream.ReadString();
                double   value = stream.ReadDouble();

                int        propCount = stream.ReadVarInt();
                Modifier[] modifiers = new Modifier[propCount];
                for (int y = 0; y < modifiers.Length; y++)
                {
                    UUID   uuid   = new UUID(stream.ReadUuid().ToByteArray());
                    double amount = stream.ReadDouble();
                    byte   op     = (byte)stream.ReadByte();

                    modifiers[y] = new Modifier()
                    {
                        Amount    = amount,
                        Operation = op,
                        Uuid      = uuid
                    };
                }

                prop.Value     = value;
                prop.Modifiers = modifiers;
                prop.Key       = key;

                if (!Properties.ContainsKey(key))
                {
                    Properties.Add(key, prop);
                }
            }
        }
Exemplo n.º 9
0
        private void ReadAddPlayerEntries(int count, MinecraftStream stream)
        {
            AddPlayerEntries = new AddPlayerEntry[count];
            for (int i = 0; i < count; i++)
            {
                var newEntry = new AddPlayerEntry();
                newEntry.UUID = stream.ReadUuid();
                newEntry.Name = stream.ReadString();
                int propertyLength = stream.ReadVarInt();
                newEntry.Properties = new PlayerListProperty[propertyLength];
                for (int ii = 0; ii < propertyLength; ii++)
                {
                    newEntry.Properties[ii] = new PlayerListProperty()
                    {
                        Name     = stream.ReadString(),
                        Value    = stream.ReadString(),
                        IsSigned = stream.ReadBool()
                    };

                    if (newEntry.Properties[ii].IsSigned)
                    {
                        newEntry.Properties[ii].Signature = stream.ReadString();
                    }
                }

                newEntry.Gamemode       = stream.ReadVarInt();
                newEntry.Ping           = stream.ReadVarInt();
                newEntry.HasDisplayName = stream.ReadBool();
                if (newEntry.HasDisplayName)
                {
                    newEntry.DisplayName = stream.ReadString();
                }

                AddPlayerEntries[i] = newEntry;
            }
        }
Exemplo n.º 10
0
        public void FinishReading()
        {
            using (MemoryStream ms = new MemoryStream(Data))
                using (MinecraftStream stream = new MinecraftStream(ms))
                {
                    byte index = 0;
                    do
                    {
                        index = (byte)stream.ReadByte();
                        if (index == 0xff)
                        {
                            break;
                        }

                        MetadataType  type = (MetadataType)stream.ReadVarInt();
                        MetaDataEntry meta = null;
                        switch (type)
                        {
                        case MetadataType.Byte:
                            meta = new MetadataByte(index, (byte)stream.ReadByte());
                            break;

                        case MetadataType.Varint:
                            meta = new MetadataVarInt(index, stream.ReadVarInt());
                            break;

                        case MetadataType.Float:
                            meta = new MetadataFloat(index, stream.ReadFloat());
                            break;

                        case MetadataType.String:
                            meta = new MetadataString(index, stream.ReadString());
                            break;

                        case MetadataType.Chat:
                            meta = new MetadataChat(index, stream.ReadChatObject());
                            break;

                        case MetadataType.OptChat:
                            var hasData = stream.ReadBool();
                            meta = new MetadataOptChat(index, hasData, hasData ? stream.ReadChatObject() : null);
                            break;

                        case MetadataType.Slot:
                            meta = new MetadataSlot(index, stream.ReadSlot());
                            break;

                        case MetadataType.Boolean:
                            meta = new MetadataBool(index, stream.ReadBool());
                            break;

                        case MetadataType.Rotation:
                            meta = new MetadataRotation(index, new Vector3(stream.ReadFloat(), stream.ReadFloat(), stream.ReadFloat()));
                            break;

                        case MetadataType.Position:
                            meta = new MetadataPosition(index, stream.ReadPosition());
                            break;

                        case MetadataType.OptPosition:
                        {
                            bool hasPosition = stream.ReadBool();

                            meta = new MetadataOptPosition(
                                index, hasPosition, hasPosition ? stream.ReadPosition() : (Vector3?)null);
                        }

                        break;

                        case MetadataType.Direction:
                            meta = new MetadataDirection(index, (API.Utils.Direction)stream.ReadVarInt());                         // stream.ReadVarInt();
                            break;

                        case MetadataType.OptUUID:
                        {
                            var hasUUID = stream.ReadBool();
                            meta = new MetadataOptUUID(index, hasUUID, hasUUID ? new UUID(stream.ReadUuid().ToByteArray()) : null);                        // stream.ReadUuid();
                        }
                        break;

                        case MetadataType.OptBlockID:
                            stream.ReadVarInt();
                            break;

                        case MetadataType.NBT:
                            meta = new MetadataNbt(index, stream.ReadNbtCompound());
                            break;

                        case MetadataType.Particle:
                            break;

                        case MetadataType.VillagerData:
                            meta = new MetadataVillagerData(
                                index, (MetadataVillagerData.VillagerTypes)stream.ReadVarInt(), (MetadataVillagerData.VillagerProfession)stream.ReadVarInt(), (MetadataVillagerData.VillagerLevel)stream.ReadVarInt());
                            break;

                        case MetadataType.OptVarInt:
                            stream.ReadVarInt();
                            break;

                        case MetadataType.Pose:
                            stream.ReadVarInt();
                            break;
                        }

                        if (meta != null)
                        {
                            Entries.Add(meta);
                        }
                    } while (index != 0xff);
                }
        }
Exemplo n.º 11
0
        public void FinishReading()
        {
            using (MemoryStream ms = new MemoryStream(Data))
                using (MinecraftStream stream = new MinecraftStream(ms))
                {
                    byte index = 0;
                    do
                    {
                        index = (byte)stream.ReadByte();
                        if (index == 0xff)
                        {
                            break;
                        }

                        MetadataType  type = (MetadataType)stream.ReadVarInt();
                        MetaDataEntry meta = null;
                        switch (type)
                        {
                        case MetadataType.Byte:
                            meta = new MetadataByte(index, (byte)stream.ReadByte());
                            break;

                        case MetadataType.Varint:
                            meta = new MetadataVarInt(index, stream.ReadVarInt());
                            break;

                        case MetadataType.Float:
                            meta = new MetadataFloat(index, stream.ReadFloat());
                            break;

                        case MetadataType.String:
                            meta = new MetadataString(index, stream.ReadString());
                            break;

                        case MetadataType.Chat:
                            meta = new MetadataChat(index, stream.ReadChatObject());
                            break;

                        case MetadataType.OptChat:
                            var hasData = stream.ReadBool();
                            meta = new MetadataOptChat(index, hasData, hasData ? stream.ReadChatObject() : null);
                            break;

                        case MetadataType.Slot:
                            meta = new MetadataSlot(index, stream.ReadSlot());
                            break;

                        case MetadataType.Boolean:
                            meta = new MetadataBool(index, stream.ReadBool());
                            break;

                        case MetadataType.Rotation:
                            stream.ReadFloat();
                            stream.ReadFloat();
                            stream.ReadFloat();
                            break;

                        case MetadataType.Position:
                            stream.ReadPosition();
                            break;

                        case MetadataType.OptPosition:
                            if (stream.ReadBool())
                            {
                                stream.ReadPosition();
                            }
                            break;

                        case MetadataType.Direction:
                            stream.ReadVarInt();
                            break;

                        case MetadataType.OptUUID:
                            if (stream.ReadBool())
                            {
                                stream.ReadUuid();
                            }
                            break;

                        case MetadataType.OptBlockID:
                            stream.ReadVarInt();
                            break;

                        case MetadataType.NBT:
                            stream.ReadNbtCompound();
                            break;

                        case MetadataType.Particle:
                            break;

                        case MetadataType.VillagerData:
                            stream.ReadVarInt();
                            stream.ReadVarInt();
                            stream.ReadVarInt();
                            break;

                        case MetadataType.OptVarInt:
                            stream.ReadVarInt();
                            break;

                        case MetadataType.Pose:
                            stream.ReadVarInt();
                            break;
                        }

                        if (meta != null)
                        {
                            Entries.Add(meta);
                        }
                    } while (index != 0xff);
                }
        }
Exemplo n.º 12
0
 public override void Decode(MinecraftStream stream)
 {
     UUID     = stream.ReadUuid();
     Username = stream.ReadString();
 }