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); } }
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); } } }
public override void Decode(MinecraftStream stream) { Message = stream.ReadString(); if (!ServerBound) { Position = (byte)stream.ReadByte(); UUID = stream.ReadUuid(); } }
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(); }
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; } }
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(); }
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; } }
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); } } }
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; } }
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); } }
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); } }
public override void Decode(MinecraftStream stream) { UUID = stream.ReadUuid(); Username = stream.ReadString(); }