private static void WriteEntityMetadata(BinaryWriter bw, Game.Entities.EntityMetadata.Player metadata) { byte skinParts = 0; { if (metadata.CapeEnabled) { skinParts |= 0x01; } if (metadata.JacketEnabled) { skinParts |= 0x02; } if (metadata.LeftSleeveEnabled) { skinParts |= 0x04; } if (metadata.RightSleeveEnabled) { skinParts |= 0x08; } if (metadata.LeftPantsLegEnabled) { skinParts |= 0x10; } if (metadata.RightPantsLegEnabled) { skinParts |= 0x20; } if (metadata.HatEnabled) { skinParts |= 0x40; } } // Additional Hearts bw.WriteAsEntityMetadata(11, EntityMetadataType.Float).WriteAsFloat(metadata.AdditionalHearts); // Score bw.WriteAsEntityMetadata(12, EntityMetadataType.VarInt).WriteAsVarInt(metadata.Score, out _); // The Displayed Skin Parts bw.WriteAsEntityMetadata(13, EntityMetadataType.Byte).WriteAsByte(skinParts); // Main hand bw.WriteAsEntityMetadata(14, EntityMetadataType.Byte).WriteAsByte(metadata.MainHand); // TODO: And NBT fields }
public Task SpawnPlayer(uint entityId, Guid uuid, Vector3 position, float pitch, float yaw, Game.Entities.EntityMetadata.Player metadata) { var metaPacket = CreateEntityMetadata(entityId, metadata, bw => { WriteEntityMetadata(bw, (Game.Entities.EntityMetadata.Entity)metadata); WriteEntityMetadata(bw, (Game.Entities.EntityMetadata.Living)metadata); WriteEntityMetadata(bw, metadata); }); return(SendPacket(new SpawnPlayer { EntityId = entityId, PlayerUUID = uuid, X = position.X, Y = position.Y, Z = position.Z, Pitch = pitch, Yaw = yaw, Metadata = metaPacket.Metadata })); }